Como alternativa, se o date
não der suporte a %s
, com muitas implementações awk
, você poderá usar srand()
para obter a hora atual do Unix:
awk 'BEGIN{srand(); d = srand() - 3 * 30 * 24 * 60 * 60}; $1 > d' < a.txt
Ou use perl
:
perl -ne'BEGIN{$d = time - 3 * 30 * 24 * 60 * 60}print if $_ > $d' < a.txt
Note que 3 meses aqui são contados como um período fixo de 90 dias de 86400 segundos cada.
Se você quiser: não antes do mesmo dia do mês, 3 meses atrás na mesma hora do dia (se agora for 2013-12-15 21:02:01, isso seria desde 2013 -09-15 21:02:01 (91 dias e 1 hora atrás em um fuso horário da União Europeia por exemplo)) , veja @ Zelda's answer , ou:
perl -MPOSIX -ne 'BEGIN{@t=localtime;$t[4]-=3;$d=mktime @t}
print if $_ > $d' < a.txt
(com a ressalva de que em 29 de maio (ano não bissexto), 30 de maio e 31, 31 de julho e 31 de dezembro, a data de 3 meses atrás será a mesma do GNU date -d '3 months ago'
).
Se em vez disso, você quer dizer este mês, o anterior, ou o anterior (se hoje é 2013-12-15, seria desde 2013-10-01 00:00:00) , isso seria:
perl -MPOSIX -ne 'BEGIN{@t=localtime;$d=mktime 0,0,0,1,$t[4]-2,$t[5]}
print if $_ >= $d' < a.txt