Linux

根據匹配重複條件查找重複行數

  • November 16, 2017

基本上我在 linux 伺服器上有一個大的文本文件,我想只根據前 6 位數字計算重複項:

輸入:

1111110000000222982
112114
1111119292828
11101110
112114

輸出:

111111 (2)
112114 (2)

處理這種情況的最佳解決方案是什麼?

awk '
{a[substr($0,1,6)]++} 
END {for (i in a) {if (a[i] > 1) printf "%s (%d)\n", i, a[i]}}
' file
111111 (2)
112114 (2)

通過一些uniq實現,您可以執行以下操作:

$ <file cut -c-6 | sort | uniq -cd
  2 111111
  2 112114

並非所有實現都支持將-c(計數)與-d(僅輸出重複項)組合。

在那些不這樣做的情況下,您可以使用uniq -c和管道到awk '$1 > 1',或者執行整個操作awk來節省您的排序(但是如果有很多唯一的字元串,則可能會使用大量記憶體(儘管這裡是最多只有 100 萬個不同的 6 個字元串,這不是很多))

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