我如何' grep'对于与正则表达式匹配的最长行链

时间:2015-09-26 23:12:04

标签: awk sed grep

我正在运行一个输出这些(简化)行的程序:

A
E
E
R
E

等等......我试图找到字母代码E中出现的最长时间而没有其他东西。我怀疑最简单的方法是尝试寻找N连续,我尝试N的几个下降值,但我不知道如何做一个特定的情况,比如连续3个E线。使用sed命令这很容易吗?我想到了awk模式范围,但它允许介于两者之间的任何东西..

4 个答案:

答案 0 :(得分:4)

使用现有的Unix工具集......

arr1[0]

uniq -c file | sort -k2 -k1,1nr | awk '/E/{print $1;exit}' 将按名称和计数(按相反顺序)为您提供序列计数uniq,以便最高运行计数显示在顶部。让sort选择最高序列长度,这是设计中的第一个。

答案 1 :(得分:2)

使用awk:

BEGIN { currCount = maxCount = 0;}
$0 == "E" { currCount++;
            if(maxCount < currCount) {maxCount=currCount; line=NR;}
            next
          }

       { currCount=0; }

END { print "max sequence is " maxCount " ending at line " line }

如果该行必须与该模式匹配而不是与该字符串完全相同,请使用/E/代替$0 == "E"

答案 2 :(得分:1)

Perl解决方案:

program | perl -lne '
               if (/E/) { $c++ }
                  else  { $c = 0 }
               $m = $c if $m < $c;
               }{
               print $m'

$m会记住每个E增加的最大计数$c,并为每个非E设置为0.

答案 3 :(得分:1)

Dog