Linux
Linux下連續出現3次以上的提取行
我在 Linux 中有一張桌子:
A 0 A 0 A 0 B 0 B 1 B 0 B 1 B 0
我想提取連續出現 3 次或更多的行。
我的預期輸出是:
A 0
實際上,3次或更多只是一個簡化的例子。實際情況是我想提取連續出現30次以上的行。
任何的想法?
謝謝!
uniq -c file | awk '$1 >= 3 { print $2,$3 }'
將
uniq -c
輸出每一行以及該行連續出現的次數。對於給定的數據,它將產生3 A 0 1 B 0 1 B 1 1 B 0 1 B 1 1 B 0
如果第
awk
一個欄位大於或等於 3,則腳本將使用它並輸出最後兩個欄位。結果將是
A 0
簡單
awk
可以如下使用。awk '{!s[$0]++} END{for (x in s) if (s[x]>2) print x}' infile
這是列印重複超過 2 次
>2
但總共重複的行。您可以設置>29
讓行重複≥30 次。您可以使用@Philippos 指出的以下命令,僅列印重複≥3 次的連續行。
awk 'p!=$0{n=0} {p=$0;n++} (n==3)'
說明:將上一行儲存在 中
p
,計算其中的行數,n
如果行與前一行不同,則重置計數器。在第 3次(或第 30次)出現時列印。或者甚至是做同樣的簡短方法:
awk 'p!=$0{n=0;p=$0} ++n==3'