我正在尝试编写一个bash脚本,它将通过一个日志并向我显示任何延迟大于10的行... 文件中的Sample行是
Sep 20 00:05:03 hub1 pstfix/smtp[97852]: 3092828wdc81: to=<test@google.com>, relay=google.mail.com[169.182.1.1]:25, delay=3.8, delays=3.3/0/0.21/0.34, dsn=2.0.0, status=sent (250 ok: message accepted)
我关注的部分是“延迟= 3.8”请注意,该数字确实包含小数
答案 0 :(得分:0)
如果你有固定的日志格式,你可以像这样使用awk:
cat your_log_file | awk '{split($0, a, "="); split(a[4],b,","); if(b[1] > 10) print $0}'
否则,您可以使用awk正则表达式匹配您的模式,并与匹配的模式进行比较。
答案 1 :(得分:0)
尝试:
awk -F'[=,]' '$6>10' file
-F'[=,]'
告诉awk在=
或,
出现的地方分隔字段。通过构建日志行的方式,这意味着第六个字段是延迟时间。
$6>10
告诉awk打印第六个字段大于10的任何行。
我们带一个包含两行的示例文件,一行延迟大于十,一行延迟小于十:
$ cat file
Sep 20 00:05:03 hub1 pstfix/smtp[97852]: 3092828wdc81: to=<test@google.com>, relay=google.mail.com[169.182.1.1]:25, delay=10.1, delays=3.3/0/0.21/0.34, dsn=2.0.0, status=sent (250 ok: message accepted)
Sep 20 00:05:03 hub1 pstfix/smtp[97852]: 3092828wdc81: to=<test@google.com>, relay=google.mail.com[169.182.1.1]:25, delay=3.8, delays=3.3/0/0.21/0.34, dsn=2.0.0, status=sent (250 ok: message accepted)
我们的命令返回延迟大于10的行:
$ awk -F'[=,]' '$6>10' file
Sep 20 00:05:03 hub1 pstfix/smtp[97852]: 3092828wdc81: to=<test@google.com>, relay=google.mail.com[169.182.1.1]:25, delay=10.1, delays=3.3/0/0.21/0.34, dsn=2.0.0, status=sent (250 ok: message accepted)
答案 2 :(得分:0)
awk '{match($0,/delay=([^,]+)/,a)} a[1]>10{print $0}' inputfile
这里,使用match
gawk
函数提取延迟值,然后用于比较。因此,在这种情况下,使用delay=
函数中提到的,
提取regex
和match
之间的任何内容,并存储在使用的名为a[1]
的数组中为了比较。