我運行一個程序,它輸出這樣的詩句(簡體)線的最長鏈:我如何「grep」可以匹配一個正則表達式
A
E
E
R
E
等...而我試圖找到字母代碼E的最長出現次數,而沒有其他的東西。我懷疑最簡單的方法是嘗試連續N次查找N個連續降序的值,但我不確定如何執行特定情況,例如連續3次E行。使用sed命令很容易嗎?我認爲AWK圖案範圍,但它允許任何之間..
我運行一個程序,它輸出這樣的詩句(簡體)線的最長鏈:我如何「grep」可以匹配一個正則表達式
A
E
E
R
E
等...而我試圖找到字母代碼E的最長出現次數,而沒有其他的東西。我懷疑最簡單的方法是嘗試連續N次查找N個連續降序的值,但我不確定如何執行特定情況,例如連續3次E行。使用sed命令很容易嗎?我認爲AWK圖案範圍,但它允許任何之間..
使用現有的Unix工具集...匹配
uniq -c file | sort -k2 -k1,1nr | awk '/E/{print $1;exit}'
uniq
會給你的序列號,sort
按名稱和計數(以相反的順序)所以最高運行次數將顯示在最上面。讓awk
選擇最先設計的最高序列長度。
Perl的溶液:
program | perl -lne '
if (/E/) { $c++ }
else { $c = 0 }
$m = $c if $m < $c;
}{
print $m'
$m
記住哪些被遞增爲每個E和設置爲0的每個非-E的最大計數$c
。
使用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"
$ uniq -c file | awk '/E/&&($1>m){m=$1} END{print m+0}'
2