【发布时间】:2018-07-12 08:28:37
【问题描述】:
我正在尝试查找文件中日期范围之间的所有行。但是,日期以非标准方式格式化。有没有办法让 awk 阅读这些内容?日志文件格式如下:
Jan 5 11:34:00 log messages here
Jan 13 16:21:00 log messages here
Feb 1 01:14:00 log messages here
Feb 10 16:32:00 more messages
Mar 7 16:32:00 more messages
Apr 21 16:32:00 more messages
例如,如果我想提取 1 月 1 日到 2 月 10 日之间的所有行: 我试过了:
awk 'BEGIN{IGNORECASE=1} ($0>=from&&$0<=to)' from="Jan 1 00:00:00" to="Feb 10 23:59:59"
这是一个只能访问 awk 的系统,所以我有点受限。任何帮助将不胜感激。
编辑: 非常感谢到目前为止的答案!他们工作得很好,帮助我理解了 AWK。但是我确实忘记提到我还需要能够包括时间。
例如在包括和之间的范围内查找行:
Jan 1 12:34:00
和
Feb 20 14:23:01
EDIT2:根据@Cyrus 提供的答案,我决定也使用它来解析时间:
awk -v start="0101 10:23:22" -v stop="0210 14:21:02" \
'BEGIN{m["Jan"]="01"; m["Feb"]="02"; m["Mar"]="03"; m["Apr"]="04"}
{original = $0; $1 = m[$1]; $2 = sprintf("%.2d", $2)}
$1$2$3 >= start && $1$2$3 <= stop {print original}' file
【问题讨论】:
-
如果将月份名称标准化为数字,则可以进行直接的字典比较。