如何grep文件中的重复行?

时间:2016-04-07 10:10:44

标签: bash shell grep

我是shell脚本的新手。

我有一个日志文件,如果一行重复,我想要一个脚本来提醒我。例如:

我有以下日志:

2016-04-07 06:46:34,750 INFO: Error detected

2016-04-07 06:46:34,801 INFO: Case cleared

2016-04-07 06:46:35,744 INFO: Error detected

2016-04-07 06:48:34,558 INFO: Error detected

在上面的日志中,有两条连续的“检测到错误”的重复行。如果发生这种情况,我想收到警报。

4 个答案:

答案 0 :(得分:1)

您可以使用此awk打印重复的行:

${}

<强>输出:

awk -F ': ' 'seen[$NF]++ > 1' file

答案 1 :(得分:0)

$ awk '!NF{next} {orig=$0; $1=$2=""} $0==prev{print orig} {prev=$0}' file
2016-04-07 06:48:34,558 INFO: Error detected

答案 2 :(得分:0)

你可以试试这个

awk -v prev="" '
$0 ~ /^$/ {next}
{
    info=$4" "$5;
    if(prev == info)
        printf("repeating line: %s\n",$0);
    prev = info;
}' infile

输出

repeating line: 2016-04-07 06:48:34,558 INFO: Error detected

答案 3 :(得分:0)

这将仅报​​告第二个连续错误:

awk '
    /^[[:blank:]]*$/ {next}
    /Error detected$/ {errors++}
    !/Error detected$/ {errors=0}
    errors==2
' file

我假设您不需要收到第3次,第27次等连续错误的通知。