Aqui está um método usando tail
, date -d ...
, awk
e apenas a funcionalidade do Bash.
tail -n+2 file.csv | {
while read line ; do
tmstmp=$(echo "$line" | awk '{print $8}');
[ $(( $(date -d "now" +%s) - $(date -d "$tmstmp" +%s) )) -lt $(( 60*60*24*7 )) ] && echo "$line";
done;
}
Como funciona?
O texto acima analisa as linhas de um arquivo, file.csv
, e obtém a oitava coluna (a data) e, em seguida, calcula o delta entre o número de segundos desde a época para agora e a data analisada. Se tiverem menos de 7 dias em segundos, a linha será impressa.
Depuração
Você pode colocar essa linha para depurar o que está acontecendo. Coloque logo após a linha tmpstmp=...
:
echo "TMSTMP: $tmstmp" "TMDELTA: $(( $(date -d "now" +%s) - $(date -d "$tmstmp" +%s) ))" "TMWINDOW: $(( 60*60*24*7 ))"
Exemplo
Para simplificar, coloquei o código acima em um script e chamei-o de rprttime.bash
:
#!/bin/bash
tail -n+2 file.csv | {
while read line ; do
tmstmp=$(echo "$line" | awk '{print $8}');
echo "TMSTMP: $tmstmp" "TMDELTA: $(( $(date -d "now" +%s) - $(date -d "$tmstmp" +%s) ))" "TMWINDOW: $(( 60*60*24*7 ))"
[ $(( $(date -d "now" +%s) - $(date -d "$tmstmp" +%s) )) -lt $(( 60*60*24*7 )) ] && echo "$line";
done;
}
Agora, quando executamos:
$ ./rprttime.bash
TMSTMP: 05/07/2013 TMDELTA: 5157421 TMWINDOW: 604800
TMSTMP: 08/05/2012 TMDELTA: 28917421 TMWINDOW: 604800
TMSTMP: 04/04/2013 TMDELTA: 8008621 TMWINDOW: 604800
TMSTMP: 04/03/2013 TMDELTA: 8095021 TMWINDOW: 604800
TMSTMP: 04/03/2013 TMDELTA: 8095021 TMWINDOW: 604800
TMSTMP: 3/22/2013 TMDELTA: 9131821 TMWINDOW: 604800
TMSTMP: 04/02/2013 TMDELTA: 8181421 TMWINDOW: 604800
TMSTMP: 11/15/2012 TMDELTA: 20101021 TMWINDOW: 604800
TMSTMP: 3/22/2013 TMDELTA: 9131821 TMWINDOW: 604800
Se você alterar a janela de tempo de 7 para 60 dias e desativar a linha de depuração, verá algumas das linhas impressas:
$ date
Fri Jul 5 16:49:19 EDT 2013
$ ./rprttime.bash
T001028 1 1 1 0 0 0 05/07/2013