【问题标题】:Getting Log File Lines Within Timespan在时间跨度内获取日志文件行
【发布时间】:2014-07-16 00:01:59
【问题描述】:

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

下面是来自日志文件的 sn-p,显示了我正在使用的日期格式。

[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]

【问题讨论】:

    标签: linux sed grep redhat


    【解决方案1】:

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

    【讨论】:

    • 我收到以下错误:awk: warning: escape sequence \/' 被视为普通 /' awk: e=07\/15 19:20:43 awk: ^ backslash not last character on line
    • 日期格式如下:[07/15 14:12:13.682]。我不在乎毫秒数。
    • 选项 1 给我以下错误:awk: cmd. line:1: fatal: cannot open file s,e' for reading (No such file or directory)`
    • 日期中的“\”会给您带来问题。我刚刚复制了你的格式。试试NOW="$(date "+%m/%d %H:%M:%S")"
    • 当我运行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 我得到响应:awk: cmd. line:1: 致命:无法打开文件 `s,e {if (/Processing inbound for unit) a++} END {print a}' 进行读取(没有这样的文件或目录)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2011-08-16
    • 2019-05-28
    相关资源
    最近更新 更多