在Timespan中获取日志文件行

时间:2014-07-16 00:01:59

标签: linux sed grep redhat

我有以下代码,仅在手动替换sed命令中的$ NOW和$ THEN变量时才有效。如果我回显sed命令,所有变量输出都正确。

我尝试仅在过去的60秒内获取最新日志文件中的行,然后计算与我的搜索字符串匹配的行。

SYSFile="ls -1t /home/SPC/Log"
NewestFile=$($SYSFile | grep SYS | head -1)
NOW="$(date "+%m\/%d %H:%M:%S")"
THEN="$(date --date="60 seconds ago" "+%m\/%d %H:%M:%S")"
sed -n '/$THEN/ , /$NOW/p' $NewestFile | grep "Processing inbound for unit" | wc -l`

以下是日志文件中的一个片段,显示了我正在使用的日期格式。

[07/16 08:35:17.998]
[07/16 08:35:17.998]
[07/16 08:35:17.998]
[07/16 08:35:17.998]
[07/16 08:35:17.998]
[07/16 08:35:17.999]
[07/16 08:35:17.999]
[07/16 08:35:18.176]
[07/16 08:35:18.176]
[07/16 08:35:18.176]
[07/16 08:35:18.176]
[07/16 08:35:18.176]
[07/16 08:35:18.176]
[07/16 08:35:18.176]

1 个答案:

答案 0 :(得分:0)

尝试awk

NewestFile=$($SYSFile | grep SYS | head -1)
NOW="$(date "+%m\/%d %H:%M:%S")"
THEN="$(date --date="60 seconds ago" "+%m\/%d %H:%M:%S")"
awk -v s="$THEN" e="$NOW" 's,e' $NewestFile | grep "Processing inbound for unit" | wc -l

或者缩短一些

awk -v s="$THEN" e="$NOW" 's,e {if (/Processing inbound for unit) a++} END {print a}' $NewestFile

或者你可以这样做:

awk -v s="$(date --date="60 seconds ago" "+%m\/%d %H:%M:%S")" e="$(date "+%m\/%d %H:%M:%S")" 's,e {if (/Processing inbound for unit) a++} END {print a}' $NewestFile

此:

date --date="60 seconds ago" "+%m\/%d %H:%M:%S"

可以缩短一些

date -d -60sec "+%m\/%d %H:%M:%S"