我有大量的日志文件,我想在所有这些日志文件中的每一行中找到以下内容:“XXXX ms”,其中 XXXX 表示大于我选择的值的整数。
我怎么能使用 grep (或任何其他命令)来做到这一点?
我在 Windows 上使用 Cygwin(Linux 控制台模拟器)。
例子 :
2013-09-03 11:33:17 11278 ms ProcessMsgDisconnectV2_01 - Disconnection request received from MU.
试试这一行:
awk '$4=="ms"&&$3>100' file
这100
是你的值,你可以让它变得更好,例如从shell变量中获取参数,这样:
awk -v va="$value" '$4=="ms"&&$3>va' file
你可以用一个小的 PHP 脚本来做到这一点: 设置你的最小值:
$minValue = 500;
现在遍历所有行。循环内部:
$line = "test 1456ms"; // your line, here just example
if (preg_match('/(\d{4})ms/m', $line, $matches)) {
if ($matches[1][0] > $minValue) echo $line;
}
}
这将只检查第一次出现的 XXXXms。如果要检查其他事件,请preg_match_all
改用。
使用perl
带有两个参数的单行,第一个是要比较的值,第二个是要搜索的文件。
perl -ne '
BEGIN { $value = shift }
print if m/\b(\d+)\s+ms\b/ && $1 > $value
' 6578 infile