¿Cómo utilizar el comando awk para calcular la diferencia de fechas entre dos columnas en el mismo archivo?

¿Cómo utilizar el comando awk para calcular la diferencia de fechas entre dos columnas en el mismo archivo?

Tengo un archivo csv de varias columnas, separado por comas, que tiene dos columnas con fecha diferente (dd/mm/aaaa). Voy a identificar la diferencia entre estas dos fechas. el siguiente es el ejemplo:

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

Me pregunto si hay alguna forma de usar el comando awk para obtener la diferencia de fecha.

Probé este comando awk pero estoy seguro de que no es la forma correcta.

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

Respuesta1

Suponiendo que desea la diferencia en días, si tiene GNU awk ( gawk), podría hacer algo como

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

El mktimeargumento debe ser una cadena con el formato "YYYY MM DD HH MM SS [DST]"; establecer el DSTindicador opcional en cero le indica que ignore el horario de verano (de lo contrario, la ingenua división entre 86400 da como resultado días fraccionarios).

VerGawk: Programación AWK efectiva,9.1.5 Funciones de tiempo

información relacionada