Linux と Windows でテキストファイルの重複行を検出する方法

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 で重複行だけを検出する

次のコマンドを Power Shell で実行することによって、重複する行だけを検出することが出来ます。

PS C:\> Get-Content dup.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select -ExpandProperty Name
456
789