如何拉出大于

时间:2017-09-20 03:36:52

标签: bash scripting

我正在尝试编写一个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”请注意,该数字确实包含小数

3 个答案:

答案 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=函数中提到的,提取regexmatch之间的任何内容,并存储在使用的名为a[1]的数组中为了比较。