
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 mktime
argumento debe ser una cadena con el formato "YYYY MM DD HH MM SS [DST]"
; establecer el DST
indicador 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