cat a.txt
1387111124 ./asfjlasdf.txt
1348681215 ./akdfyxcv.txt
所以我需要这个:
cat a.txt | SOMEMAGIC
1387111124 ./asfjlasdf.txt
输出应仅包含少于3个月的行。我怎样才能做到这一点?(第一列始终是Unix日期,第二列是一些不带空格的字符串)
另外,如果您date
不支持%s
,并且有许多awk
实现,则可以使用它srand()
来获取当前的Unix时间:
awk 'BEGIN{srand(); d = srand() - 3 * 30 * 24 * 60 * 60}; $1 > d' < a.txt
或使用perl
:
perl -ne'BEGIN{$d = time - 3 * 30 * 24 * 60 * 60}print if $_ > $d' < a.txt
请注意,此处的3个月被视为每个90400秒的90天固定期限。
相反,如果您要:不在每月的同一天之前,3个月前的同一天(如果现在是2013-12-15 21:02:01,那应该是从2013-09-15 21开始): 02:01(例如,在欧盟时区的91天零一小时前),请参见@Zelda的答案,或:
perl -MPOSIX -ne 'BEGIN{@t=localtime;$t[4]-=3;$d=mktime @t}
print if $_ > $d' < a.txt
(警告:5月29日(非non年),5月30日和31日,7月31日和12月31日,三个月前的日期与GNU相同date -d '3 months ago'
)。
如果是相反,则表示本月,上一个月或上一个月的前一个月(如果今天是2013-12-15,那将是自2013-10-01 00:00:00以来),那就是:
perl -MPOSIX -ne 'BEGIN{@t=localtime;$d=mktime 0,0,0,1,$t[4]-2,$t[5]}
print if $_ >= $d' < a.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句