Holen Sie sich die Last-Minute-Datierungen aus der Liste

Holen Sie sich die Last-Minute-Datierungen aus der Liste

Wenn ich eine Eingabedatei mit einer Liste von Benutzern und den Daten ihrer letzten Anmeldung habe, wie kann ich mit einer sort | awkFunktion die Last-Minute-Zeilen auswählen?

Die Daten werden in einem +%H:%M:%SFormat geschrieben.

Beispiel:

George 12:00:15 
Max    12:01:03 
Kate   10:32:54 
Adam   08:21:47 
Andrea 12:00:10

Aktuelles Datum ist12:01:04

Die Ergebnisse einer if-Funktion wären die 1., 2. und 5. Zeile

Antwort1

Mit GNU dateund awk:

awk -F'[ :]+' -v l=$(date -d '1 minutes ago' "+%H:%M") -v c=$(date "+%H:%M") '
    $2":"$3==l || $2":"$3==c
' file
George 12:33:15 
Max    12:33:03 
Andrea 12:33:10

Antwort2

Mit GNU awk:

awk 'BEGIN{t=strftime("%T",systime()-60)}$NF >= t'

Antwort3

In bashund mithilfe von GNU date(Standard auf den meisten Linux-Systemen) können Sie Folgendes tun:

threshold=$(( $(date -d 12:01:04 +%s) - 60 ))
paste file <(awk '{ print $2 }' file | date -f - +%s) |
  awk '$3 > '"$threshold"' { print $1,$2 }'

Oder um die Formatierung gemäß dem Beispiel in der Frage beizubehalten:

threshold=$(( $(date -d 12:01:04 +%s) - 60 ))
paste file <(awk '{ print $2 }' file | date -f - +%s) |
  awk '$3 > '"$threshold" |
  cut -c 1-15

Ausgabe:

George 12:00:15
Max    12:01:03
Andrea 12:00:10

Für ein reales Beispiel können Sie das Datum auch auf „vor 1 Minute“ setzen (gemäß Gnoucs Antwort). Die erste Zeile wäre dann:

threshold=$(date -d '1 minute ago' +%s)

verwandte Informationen