1

我有大量的日志文件,我想在所有这些日志文件中的每一行中找到以下内容:“XXXX ms”,其中 XXXX 表示大于我选择的值的整数。

我怎么能使用 grep (或任何其他命令)来做到这一点?

我在 Windows 上使用 Cygwin(Linux 控制台模拟器)。

例子 :

2013-09-03 11:33:17    11278 ms ProcessMsgDisconnectV2_01 - Disconnection request received from MU.
4

3 回答 3

2

试试这一行:

awk '$4=="ms"&&$3>100' file

100是你的值,你可以让它变得更好,例如从shell变量中获取参数,这样:

awk -v va="$value" '$4=="ms"&&$3>va' file
于 2013-09-03T13:24:32.960 回答
1

你可以用一个小的 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改用。

于 2013-09-03T14:18:35.377 回答
0

使用perl带有两个参数的单行,第一个是要比较的值,第二个是要搜索的文件。

perl -ne '
    BEGIN { $value = shift } 
    print if m/\b(\d+)\s+ms\b/ && $1 > $value
' 6578 infile
于 2013-09-03T13:33:03.257 回答