Linux

Linux下連續出現3次以上的提取行

  • September 15, 2017

我在 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'

引用自:https://unix.stackexchange.com/questions/392149