Filtre um arquivo CSV por colunas de tempo

1

Eu tenho o arquivo csv com a seguinte estrutura. Tem 5 colunas.

2/3/2018    17:00:00    39.50755167 139.94117   72
.....
2/1/2018    1:00:00     37.67323333 140.0666667 48
......

Eu quero filtrar o arquivo csv e selecionar todas as linhas de dados que aconteceram antes de 2/3/2018 17:00:00 e salvar os dados filtrados em um novo arquivo csv.

    
por zz_0513 07.05.2018 / 01:53

1 resposta

1

Suponho que suas datas sejam MM / DD / AAAA (e não DD / MM / AAAA). Eu suponho que você quer que o cutoff seja especificado externamente (hard coded) e não baseado na primeira linha.

Você pode fazer isso no gawk (GNU awk):

awk '
  BEGIN { cutoff = mktime("2018 2 3 17 0 0");
          if (cutoff < 0) { print "Bad cutoff date."; exit; } }
        {
            if (split($1, da, "/") == 3  &&  split($2, ti, ":") == 3) {
                thisdate = mktime(da[3] " " da[1] " " da[2] " " ti[1] " " ti[2] " " ti[3])
                if (thisdate >= 0  &&  thisdate < cutoff) print
            }
        }
    '

A função mktime do gawk converte uma string de hora no formato "AAAA MM DD hh mm ss" para uma hora do sistema. Começamos (BEGIN) convertendo 2/3/2018 17:00:00 para uma hora do sistema. Então, para cada linha, verificamos que ela contém uma data e hora válidas, convertemos e comparamos com o ponto de corte.

É claro que, se seu arquivo for realmente separado por vírgulas, você deve usar -F, .

    
por 07.05.2018 / 05:46