请帮我在两个时间段之间获取日志中的所有文本。
日志文件示例
2014-10-23 00:24:37 .....some data
2014-10-23 00:25:37......some data
2014-10-23 00:26:37.......some data
Error code HO5006
2014-10-23 00:27:37...some data
我使用awk
下面的命令来获取2014-10-23 00:25:37 & 2014-10-23 00:27:37
:
awk '$0>=from && $0<=to' from="$1" to="$2" logfile
我得到的输出是
2014-10-23 00:26:37.......some data
2014-10-23 00:27:37...some data
但是我预期的输出会是
2014-10-23 00:26:37.......some data
Error code HO5006
2014-10-23 00:27:37...some data
答案 0 :(得分:0)
在awk中可能有一种更优雅的方法可以做到这一点,但这样做可以解决问题:
awk 'BEGIN {capture="no"};{if ($0>=from) capture="yes"} {if (capture=="yes") print $0} {if ($0<=to) capture="no"};' from="$1" to="$2" logfile
这会将capture
设置为&#34; no&#34;直到找到大于或等于from
的行,它才会将capture
切换为&#34;是&#34;,然后打印直到to
变量为止的行击中。
答案 1 :(得分:0)
问题是Error code HO5006
字符串大于日期字符串(几乎所有以无数字开头的字符串)。因此,如果传递日期,则应打印与日期模式不匹配的行。
所以我的建议是:
awk --posix -v from="2014-10-23 00:26:37" -v to="2014-10-23 00:27:37" '
{dt=$1" "$2}
dt~/^[0-9]{4}-/{if(dt>=from)++s;if(dt>to)exit}
s
' << EOT
2014-10-23 00:24:37 .....some data
2014-10-23 00:25:37 ......some data
2014-10-23 00:26:37 .......some data
Error code HO5006
2014-10-23 00:27:37 ...some data
2014-10-23 00:28:37 ...some data
2014-10-23 00:29:37 ...some data
EOT
(如果确实需要,日期模式可以更精确)
输出:
2014-10-23 00:26:37 .......some data
Error code HO5006
2014-10-23 00:27:37 ...some data
我希望这有帮助!