scripts/bettercounter-cli/bettercounter-cli.sh
2024-08-21 22:50:07 +02:00

127 lines
3.9 KiB
Bash
Executable file

#!/bin/bash
# Chemin vers le fichier CSV original
original_file="exemple.csv"
# Nom du fichier temporaire pour traitement
temp_file="temp.csv"
# Créer une copie du fichier original
cp "$original_file" "$temp_file"
# Ajouter une virgule à la fin de chaque ligne du fichier copié, uniquement si elle n'existe pas déjà
awk '{if (substr($0,length,1) != ",") print $0","; else print $0;}' "$temp_file" > "${temp_file}.tmp"
mv "${temp_file}.tmp" "$temp_file"
# Fonction pour convertir un timestamp en date
convert_to_date() {
local timestamp_ms=$1
#date -d @"$((timestamp_ms / 1000))" +"%Y-%m-%d %H:%M:%S"
date -d @"$((timestamp_ms / 1000))" +"%d/%m/%Y %H:%M"
}
# Fonction pour afficher une boîte ASCII
ascii_box() {
local box_text="$1"
# Couleurs
local color="\033[1;34m" # Bleu gras
local reset="\033[0m" # Réinitialisation de la couleur
# Définir la largeur de la boîte (en fonction de la taille du texte)
local box_width=$(( ${#box_text} + 4 )) # Ajouter 4 pour les marges
# Calculer le positionnement du texte (centré)
local padding=2 # On ajoute 2 espaces de chaque côté du texte
# Dessiner la boîte
printf '┌'
for (( j=0; j<box_width; j++ )); do
printf '─'
done
printf '┐\n'
# Afficher la ligne avec le texte
printf '│'
printf "%*s" $padding ""
printf "${color}%s${reset}" "$box_text"
printf "%*s" $padding ""
printf '│\n'
# Dessiner la ligne inférieure de la boîte
printf '└'
for (( j=0; j<box_width; j++ )); do
printf '─'
done
printf '┘\n'
}
# Lire chaque ligne du fichier temporaire
while IFS=',' read -r type timestamps; do
# Traiter les timestamps en tenant compte de l'absence de virgule après le dernier timestamp
timestamps=$(echo "$timestamps" | awk '{gsub(/,$/, ""); print}')
# Convertir les timestamps séparés par des virgules en un tableau
IFS=',' read -ra timestamp_array <<< "$timestamps"
# Filtrer les timestamps valides (non vides et numériques)
valid_timestamps=()
for ts in "${timestamp_array[@]}"; do
if [[ -n "$ts" && "$ts" =~ ^[0-9]+$ ]]; then
valid_timestamps+=("$ts")
fi
done
# Calculer le nombre total d'itérations
total_iterations=${#valid_timestamps[@]}
# Débogage : afficher les timestamps valides
# echo "Timestamps valides: ${valid_timestamps[@]}"
if (( total_iterations > 0 )); then
# Trier les timestamps pour garantir l'ordre croissant
IFS=$'\n' sorted_timestamps=($(sort -n <<<"${valid_timestamps[*]}"))
unset IFS
# Débogage : afficher les timestamps triés
# echo "Timestamps triés: ${sorted_timestamps[@]}"
# Trouver la dernière itération (le plus grand timestamp)
last_timestamp=${sorted_timestamps[-1]}
# Convertir le dernier timestamp en date lisible
last_iteration_date=$(convert_to_date "$last_timestamp")
# Calculer la moyenne du temps entre les itérations
if (( total_iterations > 1 )); then
sum_intervals=0
for ((i = 1; i < total_iterations; i++)); do
interval=$((sorted_timestamps[i] - sorted_timestamps[i - 1]))
sum_intervals=$((sum_intervals + interval))
done
# Moyenne du temps entre les itérations en millisecondes
average_interval=$((sum_intervals / (total_iterations - 1)))
# Conversion en jours
average_days=$(echo "scale=2; $average_interval / 1000 / 60 / 60 / 24" | bc)
else
average_days="N/A"
fi
# Afficher les résultats pour ce type
#echo "Compteur: $type"
ascii_box "$type : $total_iterations"
#echo "Total: $total_iterations" # Nombre total de timestamps
echo "Dernier: $last_iteration_date"
echo "Interval moyen: $average_days jours"
#echo "--------------------------------------------"
else
#echo "Compteur: $type"
ascii_box "$type"
echo "Pas assez de données."
#echo "--------------------------------------------"
fi
done < "$temp_file"
# Supprimer le fichier temporaire après traitement
rm "$temp_file"