Comment calculer cette différence dans unix

J’ai un fichier nommé Test1.dat et son contenu est comme suit

Abcxxxxxxxxxxx_123.dat@10:10:15 Bcdxxxxxxxxxxx_145.dat@10:15:23 Cssxxxxxxxxxxx_567.dat@10:26:56 Fgsxxxxxxxxxxx_823.dat@10:46:56 Kssxxxxxxxxxxx_999.dat@11:15:23 

Veuillez noter qu’après le symbole @, c’est le format HH: MM: SS qui suit. Ma question est maintenant que je veux calculer la différence de temps entre l’heure actuelle et l’heure présente dans les fichiers et ne récupérer que les noms de fichiers où la différence de temps est supérieure à 30 minutes. Donc, si l’heure actuelle est 11:00:00, je veux récupérer les fichiers arrivés 30 minutes avant les trois premiers fichiers.

Cet awk devrait faire:

 awk -F@ '$2>=from && $2<=to' from="$(date +%H:%M:%S -d -30min)" to="$(date +%H:%M:%S)" file 

Si vous avez seulement besoin des 30 dernières minutes (dans votre cas vous avez besoin du premier puisque vous n'aimez pas 11:30):

 awk -F@ '$2>=from' from="$(date +%H:%M:%S -d -30min)" file 

Vous pouvez également utiliser le script bash et obtenir le résultat

 #!/bin/bash current=`date '+%s'` needed_time=`echo "$current - 60 * 30" | bc` while read line ; do time=`echo $line |sed -r 's/[^@]*.(.*)/\1/g'` user_time=`date -d $time '+%s'` if [ $user_time -le $needed_time ] ; then echo "$line" fi done < file_name 

Serait-ce la réponse?

 awk -F@ '{ts = systime(); thirty_mins = 30 * 60; thirty_mins_ago = ts - thirty_mins; if ($2 < strftime("%H:%M:%S", thirty_mins_ago)) print $2 }'  

strftime est une extension GAWK (gnu awk).