Wie verwende ich den Awk-Befehl, um die Datumsdifferenz zwischen zwei Spalten in derselben Datei zu berechnen?

Wie verwende ich den Awk-Befehl, um die Datumsdifferenz zwischen zwei Spalten in derselben Datei zu berechnen?

Ich habe eine CSV-Datei mit mehreren Spalten, durch Kommas getrennt, die zwei Spalten mit unterschiedlichen Daten (mm/tt/jjjj) enthält. Ich werde den Unterschied zwischen diesen beiden Daten ermitteln. Folgendes ist das Beispiel:

echo filename
    001xxxc,28.2,03/04/2009,11/19/2009
    00cvbfd,34.4,03/04/2009,01/06/2010
    04rsdsd,34,12/01/2006,10/02/2001
    456dfds,40,12/01/2006,04/23/2002
    et556ss,40.8,12/01/2006,10/22/2002

Ich frage mich, ob es eine Möglichkeit gibt, mit dem Awk-Befehl die Datumsdifferenz zu ermitteln.

Ich habe diesen Awk-Befehl ausprobiert, bin aber sicher, dass das nicht der richtige Weg ist?

awk -F, '{print $1","$2","$3-$4}' filename

Antwort1

Angenommen, Sie möchten die Differenz in Tagen, dann gawkkönnten Sie mit GNU awk ( ) etwas wie

gawk -F, '
  {
    split($3,a,"/"); 
    split($4,b,"/"); 
    t1 = mktime(sprintf("%d %d %d 0 0 0 0",a[3],a[1],a[2])); 
    t2 = mktime(sprintf("%d %d %d 0 0 0 0",b[3],b[1],b[2])); 
    print (t2-t1)/86400
  }
' filename
260
308
-1886
-1683
-1501

Das mktimeArgument muss eine Zeichenfolge im Format sein "YYYY MM DD HH MM SS [DST]". Wenn Sie das optionale DSTFlag auf Null setzen, wird die Sommerzeit ignoriert (andernfalls führt die naive Division durch 86400 zu Bruchteilen von Tagen).

SehenGawk: Effektive AWK-Programmierung,9.1.5 Zeitfunktionen

verwandte Informationen