我有以下代码,仅在手动替换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]
答案 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"