Bash 如何grep文件中的重复行?

Bash 如何grep文件中的重复行?,bash,shell,grep,Bash,Shell,Grep,我不熟悉shell脚本 repeating line: 2016-04-07 06:48:34,558 INFO: Error detected 我有一个日志文件,我想要一个脚本来提醒我,如果一行重复。例如: repeating line: 2016-04-07 06:48:34,558 INFO: Error detected 我有如下日志: 2016-04-07 06:46:34,750 INFO: Error detected 2016-04-07 06:46:34,801 INFO

我不熟悉shell脚本

repeating line: 2016-04-07 06:48:34,558 INFO: Error detected
我有一个日志文件,我想要一个脚本来提醒我,如果一行重复。例如:

repeating line: 2016-04-07 06:48:34,558 INFO: Error detected
我有如下日志:

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
repeating line: 2016-04-07 06:48:34,558 INFO: Error detected

在上述日志中,有两条连续出现“错误检测”的重复行。如果发生这种情况,我希望得到提醒。

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

awk -F ': ' 'seen[$NF]++ > 1' file
repeating line: 2016-04-07 06:48:34,558 INFO: Error detected
输出:

2016-04-07 06:48:34,558 INFO: Error detected
repeating line: 2016-04-07 06:48:34,558 INFO: Error detected
你可以试试这个

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
输出:

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

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

repeating line: 2016-04-07 06:48:34,558 INFO: Error detected
awk '
    /^[[:blank:]]*$/ {next}
    /Error detected$/ {errors++}
    !/Error detected$/ {errors=0}
    errors==2
' file

我假设第3次、第27次等连续错误不需要通知您。

anubhava的回答,
awk-F':''看到的[$NF]++>1'文件相比之下非常简单,而且可以工作,而您的回答只是让事情变得过于复杂@用户3439894告诉试图帮助你的人,他们的
答案过于复杂,这是非常不礼貌的。阿努巴瓦的答案对于你所说的你想要的太简单了。如果它是你真正想要的,而不是你所说的你想要的,那就高兴你得到了答案。@EdMorton,首先我不是寻求帮助的人,zeewagon是!第二,我的意图不是粗鲁和抱歉,如果这样做的话,我只是根据我对OP要求的解释,以及anubhava的答案输出了your和Ren的答案,正如我所说的“比较简单”,做出了我认为合理的评论。随着我不断的学习,我认识到,有时可以做的更多,代码更少,效率也更高。也许不是这样,也许是。。。OP必须决定什么代码最适合他的问题。在给定一些示例输入的情况下生成预期输出的脚本是确定解决方案的起点,而不是终点。我假设你是OP,因为你在多个答案下的评论中声明anubhavas答案有效,其余的都是不必要的复杂。正如您所提到的,最好由OP来决定哪种解决方案“有效”,而不是在给定一些示例输入的情况下仅产生预期的输出。anubhava的答案,
awk-F':''seed[$NF]++>1'文件
相比之下非常简单,而且有效,而您的答案只是过于复杂了@anubhava的回答确定了整个fie中的所有重复项,而你问
如何对文件中的重复行进行grep?
并说
有两个重复行连续检测到“错误”。如果发生这种情况,我希望得到提醒。
要做到这一点,您需要我发布的脚本。换句话说,我的脚本按照您的要求识别重复行,而anubhava的脚本识别重复行,这是一个非常不同且更简单的问题。看起来这将在遇到下一个非错误行时开始打印误报。我们不需要打印所有重复的实例吗?OP可以澄清吗?您给出的示例文件中没有重复的行。你的问题要精确,答案往往是显而易见的。你只对连续的错误行感兴趣吗?
repeating line: 2016-04-07 06:48:34,558 INFO: Error detected