在两个时间帧之间获取日志中的所有文本

时间:2014-10-27 20:16:27

标签: awk

请帮我在两个时间段之间获取日志中的所有文本。

日志文件示例

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

2 个答案:

答案 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

我希望这有帮助!