我正在运行一个输出这些(简化)行的程序:
A
E
E
R
E
等等......我试图找到字母代码E中出现的最长时间而没有其他东西。我怀疑最简单的方法是尝试寻找N连续,我尝试N的几个下降值,但我不知道如何做一个特定的情况,比如连续3个E线。使用sed命令这很容易吗?我想到了awk模式范围,但它允许介于两者之间的任何东西..
答案 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