Grep para datas com mais de 14 dias em um arquivo [duplicado]

2

Estou tentando encontrar uma maneira de determinar quantas mensagens em um arquivo são mais antigas que 14 days e ter um valor de número de resultados retornados

Exemplo com a data de hoje de 20160616 . $grep 'Put Date' filename :

Put Date     :'20160425'
Put Date     :'20160501'
Put Date     :'20160514'
Put Date     :'20160609'
Put Date     :'20160610'
Put Date     :'20160616'

Os resultados devem ter os seguintes mais de 14 dias e return 3 :

Put Date     :'20160226'
Put Date     :'20160501'
Put Date     :'20160514'
    
por n00bi3 16.06.2016 / 17:35

2 respostas

0

Você pode usar:

awk -v threshold=$(date "--date=$(date) -14 day" +%Y%m%d) -F "'" '$2 < threshold' filename | wc -l

Isso é semelhante à solução em esta postagem , exceto que a data é computada em linha.

Observação: filename deve ser substituído pelo nome do seu arquivo .

Além disso, lembre-se de ter cuidado com suas regras para datas limite (verifique as condições da borda).

    
por 16.06.2016 / 18:06
0

Uma solução awk foi postada, então vou fazer uma grep -based.

Primeiro, crie um arquivo com datas que você não deseja ver, uma por linha. Isso será apenas 15 entradas, por isso não é necessário muito processamento e é rápido. O seguinte requer o GNU date , que no meu sistema [BSD] está instalado como gdate :

i=0
while (( i < 15 )); do
    gdate -d "now -$(( i++ )) days" +"%Y%m%d"
done >dates_to_skip

Uma vez feito isso, você pode simplesmente usar isso como o filtro para fgrep -v :

fgrep -v -f dates_to_skip mydata
    
por 16.06.2016 / 18:18