我试图查找文件中日期范围之间的所有行。但是日期是以非标准方式格式化的。有没有办法让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
答案 0 :(得分:2)
$ cat tst.awk
{
mthNr = (index("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3
date = sprintf("%02d%02d", mthNr, $2)
}
(date >= from) && (date <= to)
$ awk -v from='0101' -v to='0210' -f tst.awk file
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
按摩以适应...
答案 1 :(得分:1)
用awk。 0101
是1月1日,0210
是2月10日。
awk -v start="0101" -v stop="0210" \
'BEGIN{m["Jan"]="01"; m["Feb"]="02"; m["Mar"]="03"; m["Apr"]="04"}
{original = $0; $1 = m[$1]; $2 = sprintf("%.2d", $2)}
$1$2 >= start && $1$2 <= stop {print original}' file
输出:
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