web-dev-qa-db-ja.com

ファイル内で重複行を見つけて、各行が重複した回数を数えますか?

次のようなファイルがあるとします。

123 
123 
234 
234 
123 
345

'123'が何回複製されたか、 '234'が複製された回数などを見つけたいと思います。したがって、理想的には、出力は次のようになります。

123  3 
234  2 
345  1
445
user839145

1行に1つの番号があると仮定します。

sort <file> | uniq -c

Linuxでは、GNUバージョンでもより冗長な--countフラグを使用できます。

sort <file> | uniq --count
691
wonk0

これは重複行のみを印刷になります。

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
357
Andrea

複数のファイルで重複行を見つけて数えるには、次のコマンドを試してください。

sort <files> | uniq -c | sort -nr

または

cat <files> | sort | uniq -c | sort -nr
68
kenorb

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を使用できます。

26
αғsнιη

"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
10
vineel

標準のUnixシェルやcygwin、あるいはその両方の環境にアクセスできると仮定します。

tr -s ' ' '\n' < yourfile | sort | uniq -d -c
       ^--space char

基本的には、すべての空白文字を改行に変換してから、変換された出力をソートし、それをuniqに送り、重複する行を数えます。

6
Marc B