Awk 我如何';grep';用于匹配regexp的最长行链

Awk 我如何';grep';用于匹配regexp的最长行链,awk,sed,grep,Awk,Sed,Grep,我正在运行一个程序,该程序输出如下行(简化): 等等。。。我试图找出字母代码E中出现时间最长的字母,中间没有其他东西。我想最简单的方法是尝试寻找N个连续的,其中我尝试了N的两个降序值,但我不确定如何做一个特定的情况,比如说3个连续的E行。使用sed命令容易吗?我想到了awk模式范围,但它允许介于两者之间的任何东西 Perl解决方案: program | perl -lne ' if (/E/) { $c++ } else { $

我正在运行一个程序,该程序输出如下行(简化):

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

Perl解决方案:

program | perl -lne '
               if (/E/) { $c++ }
                  else  { $c = 0 }
               $m = $c if $m < $c;
               }{
               print $m'
程序| perl-lne'
if(/E/){$c++}
else{$c=0}
如果$m<$c,则$m=$c;
}{
打印$m'
$m
记住最大计数
$c
,该计数对于每个E递增,对于每个非E设置为0。

使用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 }
BEGIN{currCount=maxCount=0;}
$0==“E”{currCount++;
如果(maxCount

如果行必须与模式匹配,而不是与字符串完全相等,请使用现有Unix工具集使用
/E/
而不是
$0==“E”

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

$ uniq -c file | awk '/E/&&($1>m){m=$1} END{print m+0}'
2
$ uniq -c file | awk '/E/&&($1>m){m=$1} END{print m+0}'
2