gpt4 book ai didi

linux - 获取时间跨度内的日志文件行

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:39 26 4
gpt4 key购买 nike

我有以下代码,仅在手动替换 s​​ed 命令中的 $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]

最佳答案

尝试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"

关于linux - 获取时间跨度内的日志文件行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com