Linux と Windows でテキストファイルの重複行を検出したり重複を除外する方法
Linux と Windows でテキストファイル中の重複を省いたり、重複行を検出する方法です。Linux では Linux コマンドを使って重複行操作を行い、Windows では Power Shell を使って重複行を操作する方法を解説します。重複を含むファイルを作成
まず最初に次のような重複行を含むファイルを作成しておきます。このファイルの中で 789 という行と 456 という行が重複しています。このファイルの中から重複する行を除外したり(省いたり)、重複する行だけを検出する方法を見ていきます。$ cat dup.txt 123 456 ABC 789 DEF GHI 789 111 222 333 456
Linux で重複行を除外する
重複する行を省くには、最初にファイルの中身をソートして順番に並べ替える必要があります。sort コマンドを使えばファイルの中身は順番に並べ替えられます。順番に並べられたファイルの中身を uniq コマンドにパイプ(|)で渡してあげることで、重複行が全て取り除かれて、以下のように一意な行のみが表示されます。
$ sort dup.txt | uniq 111 123 222 333 456 789 ABC DEF GHI
Linux で重複する行だけを検出する
789 という行と 456 という行がそれぞれ重複していますので、それらだけを検出する方法を見てみます。同じようにファイルの中身を sort コマンドで並び替えた上で、uniq -D というコマンドを実行することで、全ての重複した行だけを表示することが出来ます。$ sort dup.txt | uniq -D 456 456 789 789
Linux で重複する行が何行あるのか調べる
もしファイルの中に大量の行があって重複行が複数ある場合には、次のように uniq -cd というコマンドを実行することで、どの行が何件重複しているかを知ることが出来ます。$ sort dup.txt | uniq -cd 2 456 2 789
結果の左側の "2" が重複している行の数を示しています。
Windows Power Shell で重複行を除外する
Windows の Power Shell を使うと、次のようにして重複行を除外することが出来ます。PS C:\> gc dup.txt | sort | get-unique 111 123 222 333 456 789 ABC DEF GHI
Windows Power Shell で重複行だけを検出する
PS C:\> Get-Content dup.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select -ExpandProperty Name 456 789