次のようなファイルがあるとします。
123
123
234
234
123
345
'123'が何回複製されたか、 '234'が複製された回数などを見つけたいと思います。したがって、理想的には、出力は次のようになります。
123 3
234 2
345 1
1行に1つの番号があると仮定します。
sort <file> | uniq -c
Linuxでは、GNUバージョンでもより冗長な--count
フラグを使用できます。
sort <file> | uniq --count
これは重複行のみを印刷になります。
sort FILE | uniq -cd
または、GNU longオプションを指定した場合(Linuxの場合):
sort FILE | uniq --count --repeated
BSDとOSXでは、grep を使って固有の行を除外する必要があります。
sort FILE | uniq -c | grep -v '^ *1 '
与えられた例では、結果は次のようになります。
3 123
2 234
一度だけ現れるものも含めて、{印刷はすべての行をカウントしますを使いたい場合:
sort FILE | uniq -c
または、GNU longオプションを指定した場合(Linuxの場合):
sort FILE | uniq --count
与えられた入力に対して、出力は次のようになります。
3 123
2 234
1 345
最も頻繁に表示される行を先頭にして出力をソートするには、(すべての結果を得るために)次のようにします。
sort FILE | uniq -c | sort -nr
または、重複行のみを取得するために、最も頻繁に最初に:
sort FILE | uniq -cd | sort -nr
oSXとBSDでは、最後のものは次のようになります。
sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
複数のファイルで重複行を見つけて数えるには、次のコマンドを試してください。
sort <files> | uniq -c | sort -nr
または
cat <files> | sort | uniq -c | sort -nr
awk :を介して
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
awk 'dups[$1]++'
コマンドでは、変数$1
はcolumn1の内容全体を保持し、角括弧は配列アクセスです。そのため、data
ファイルの1行目の各行について、dups
という名前の配列のノードがインクリメントされます。
そして最後に、変数としてdups
を使用してnum
配列をループ処理し、最初に保存された numbers を、次に重複した値の数をdups[num]
で出力します。
入力ファイルのいくつかの行の終わりにスペースがあることに注意してください。それらを片付ける場合は、上記のコマンドで$0
の代わりに$1
を使用できます。
"Windows PowerShell"を使用しているウィンドウで 私はこれを達成するために下記のコマンドを使用しました
Get-Content .\file.txt | Group-Object | Select Name, Count
また、where-objectコマンドレットを使用して結果をフィルター処理することもできます。
Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count
標準のUnixシェルやcygwin、あるいはその両方の環境にアクセスできると仮定します。
tr -s ' ' '\n' < yourfile | sort | uniq -d -c
^--space char
基本的には、すべての空白文字を改行に変換してから、変換された出力をソートし、それをuniqに送り、重複する行を数えます。