Como usar o comando awk para calcular a diferença de data entre duas colunas no mesmo arquivo?

1

Eu tenho um arquivo csv de várias colunas, separado por vírgula, que tem duas colunas com data diferente (mm / dd / aaaa). Eu vou identificar a diferença entre essas duas datas. A seguir, 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 há alguma maneira de usar o comando awk para obter a diferença de data.

Eu tentei esse comando do awk, mas tenho certeza de que não é o caminho correto?

awk -F, '{print $1","$2","$3-$4}' filename
    
por Daniel 16.12.2016 / 02:47

1 resposta

5

Assumindo que você quer a diferença em dias, então se você tem o 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 argumento mktime precisa ser uma string com o formato "YYYY MM DD HH MM SS [DST]" ; definir o sinalizador opcional DST como zero diz para ignorar o horário de verão (caso contrário, a divisão ingênua por 86400 resultará em dias fracionários).

Veja Gawk: Programação Efetiva de AWK, 9.1.5 Funções de Horário

    
por 16.12.2016 / 05:24