cat input.txt | awk '/ID/;/TimeReceived/ {print $2,$3,$4}'
输出:
ID: f7a570c2
03/26/14 18:22:50 GMT
ID: f7f810a2
08/13/14 23:50:59 GMT
ID: f8e76dd2
04/25/14 06:13:10 GMT
ID: f92e90c2
03/19/14 12:51:23 GMT
ID: f98ac152
08/01/14 00:10:43 GMT
ID: faef4812
04/21/14 16:29:15 GMT
ID: fb6b38d4
05/06/14 17:32:20 GMT
ID: fbfb0d92
08/26/14 04:24:07 GMT
ID: fc15d932
05/27/14 18:44:48 GMT
ID: fc235e12
06/03/14 12:39:17 GMT
ID: fc988622
06/23/14 16:02:29 GMT
ID: fcb1e6c2
03/25/14 17:37:48 GMT
ID: fd025382
05/28/14 16:50:29 GMT
ID: fd061b12
04/21/14 18:41:41 GMT
ID: fd7efde2
08/15/14 18:01:27 GMT
ID: fdd30022
05/28/14 15:51:29 GMT
ID: fdf73792
03/31/14 20:13:00 GMT
ID: fe9d3a22
04/15/14 16:15:37 GMT
ID: fea03cf2
08/04/14 02:06:00 GMT
ID: ff7e3de2
07/07/14 10:51:41 GMT
以上输出未按时间排序。我想提取所有创建时间应该是一个月的“ID”。有人可以帮我编码吗?
答案 0 :(得分:1)
使用GNU awk
和GNU date
,以下内容应该有效:
awk -vcutoff="$(date -d"-1 month" +%s)" '
/^ID:/ {
ID=$2
next
}
/^TimeReceived:/ {
split($2, d, /\//)
gsub(/:/, " ", $3)
tm=mktime("20"d[3]" "d[1]" "d[2]" "$3)
if (tm<cutoff) {
print ID
}
}' input
根据评论中的讨论,有关日期如何计算的一些例子:
$ date -d "03/31/2014 - 1 month"
Mon Mar 3 00:00:00 EST 2014
$ date -d "06/26/2014 - 1 month"
Mon May 26 00:00:00 EDT 2014
date
的信息页面在28.6
Relative items in date strings
部分中提供了有关这些计算的更多信息。