128 lines
3.9 KiB
Bash
128 lines
3.9 KiB
Bash
|
#!/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"
|