
Eu tenho um arquivo csv com várias colunas, separadas por vírgulas, que possui duas colunas com datas diferentes (dd/mm/aaaa). Vou identificar a diferença entre essas duas datas. segue o exemplo:
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
Eu me pergunto se existe alguma maneira de usar o comando awk para obter a diferença de data.
Eu tentei este comando awk, mas tenho certeza de que não é o caminho correto.
awk -F, '{print $1","$2","$3-$4}' filename
Responder1
Supondo que você queira a diferença em dias, então se você tiver GNU awk ( gawk
) você poderia fazer 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
O mktime
argumento precisa ser uma string do formato "YYYY MM DD HH MM SS [DST]"
; definir o sinalizador opcional DST
como zero indica para ignorar o horário de verão (caso contrário, a divisão ingênua por 86.400 resulta em dias fracionários).