Comando Linux para filtrar a string de data do arquivo e compará-la com uma data

0

Eu tenho um arquivo que parece:

ASDF,100090,D84,2007-12-29T01:07:35Z
ASDF,101090,F84,2008-01-03T01:09:36Z
ASDF,101190,h84,2008-01-04T01:07:31Z
ASDF,178915,r54,2008-01-15T01:09:21Z
ASDF,144290,k74,2008-02-05T01:03:31Z

Eu quero encontrar a contagem de linhas mais antigas que a data 2008-01-10 . Eu posso listar as datas com o comando cut -d "," -f 4 2008A.csv | cut -d "T" -f 1 :

2007-12-29
2008-01-03
2008-01-04
2008-01-15
2008-02-05

Mas como posso encontrar o número de linhas com mais de 2008-01-10 ?

    
por Manu 29.12.2017 / 08:41

3 respostas

1

O procedimento:

  1. injete um marcador com uma semi-data que é numericamente um pouco menor que a data limite;
  2. aplica classificação numérica;
  3. interrompe o processamento no marcador, sem passar pela própria linha do marcador;
  4. conta linhas.

O código (começa com o seu código):

{ cut -d "," -f 4 2008A.csv | cut -d "T" -f 1; \
printf "2008-01-09.9 marker\n"; } |
sort -n |
sed '/marker/Q' |
wc -l

Notas:

  • Q in sed não é POSIX, seu sed pode não entender. Em caso afirmativo, use sed '/marker/q' ; mas isso vai passar a linha do marcador, você precisa filtrá-lo antes de wc -l x ou diminuir o resultado final em um.
  • Cuidado com linhas vazias (se houver); sort os colocará no começo, isso alterará o resultado. Minha resposta assume que não há nenhuma. Uma nova linha antes do fim do arquivo (EOF) está correta, não cria uma linha vazia .
por 29.12.2017 / 10:38
0

Use apenas grep :

grep -v '2008-01-\(0[0-9]\|10\)' 2008A.csv

ou

grep -v -E '2008-01-(0[0-9]|10)' 2008A.csv

(em outras palavras, remova todas as linhas com 2008-01-0something ou 2008-01-10 ).

    
por 29.12.2017 / 09:07
0

Use dategrep de dateutils :

$ dategrep '<2008-01-10' <<EOF
ASDF,100090,D84,2007-12-29T01:07:35Z
ASDF,101090,F84,2008-01-03T01:09:36Z
ASDF,101190,h84,2008-01-04T01:07:31Z
ASDF,178915,r54,2008-01-15T01:09:21Z
ASDF,144290,k74,2008-02-05T01:03:31Z
EOF
=>
  ASDF,100090,D84,2007-12-29T01:07:35Z
  ASDF,101090,F84,2008-01-03T01:09:36Z
  ASDF,101190,h84,2008-01-04T01:07:31Z
    
por 09.04.2018 / 05:33