【发布时间】:2018-05-18 12:28:02
【问题描述】:
我有一个记录如下字符串的日志文件:(1512424528.554:0:1880:1880)。我只需要找出最后一个值超过 1000 的行并打印它们。想法?
【问题讨论】:
-
改用
awk。
我有一个记录如下字符串的日志文件:(1512424528.554:0:1880:1880)。我只需要找出最后一个值超过 1000 的行并打印它们。想法?
【问题讨论】:
awk。
Grep 并不是完成这项任务的最实用的工具。正如@WilliamPursell 建议的那样,使用 awk 或其他工具来解决这个问题。
解决方案:
使用 grep:您可以通过在最后一个冒号(.*:)之间查找以数字 1 到 9 ([1-9][0-9]{3,}) 开头的至少 4 个数字来匹配所有内容直到最后一个冒号)和行尾($)使用 perl-regexp(-P 标志)。此解决方案并不完美,因为它为您提供大于或等于 1000 的结果。
grep -P '.*:[1-9][0-9]{3,}$' your_file
使用awk:在将字段分隔符设置为-F后,您可以简单地将最后一个字段($NF)与1000进行比较。
awk -F':' '$NF > 1000 { print $0 }' your_file
使用 perl:您可以查找最后一个冒号和行尾之间的最后一个数字,并将这些数字 (\d+) 捕获到与 1000 进行比较的 $1 中。
perl -ne 'print if (/.*:(\d+)$/ and $1>1000)' your_file
更新
基于@vaettchen 的 cmets,我添加了解决方案,如果括号是记录字符串的一部分,则考虑括号。
grep:
grep -P '.*:[1-9][0-9]{3,}\)$' your_file
awk:
awk -F':' 'substr($NF, 0, length($NF)-1)*1 > 1000' your_file
perl:
perl -ne 'print if (/.*:(\d+)\)$/ and $1>1000)' your_file
【讨论】:
awk 不需要声明,只需awk -F':' '$NF > 1000 ' your_file 就可以了