
デフォルトでは、Linuxサーバーに大きなテキストファイルがあり、最初の6桁に基づいて重複するエントリ数を計算したいと思います。
入力する:
1111110000000222982
112114
1111119292828
11101110
112114
出力:
111111 (2)
112114 (2)
この状況を処理するための最良の解決策は何ですか?
答え1
一部のuniq
実装では、次のことができます。
$ <file cut -c-6 | sort | uniq -cd
2 111111
2 112114
すべての実装が結合-c
(計算)および-d
(重複項目のみ出力)をサポートするわけではありません。
そうでない場合は、uniq -c
パイプを使用して接続するawk '$1 > 1'
か、すべてをするawk
これにより、ソート操作が節約されます(ただし、一意の文字列が多い場合は多くのメモリを使用できます(ここでは最大100万の異なる6つの文字列がありますが、それほど多くはありません))。
答え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)