テキストから重複行と取り除きたい行を簡単に削除する方法

2019年10月26日

テキストのリストから重複している行を見つけて削除したい場合がよくあると思います。

リストの行数が少ない場合は手動でもなんとかなりますが多くなってくると大変です。

また、そのリストから特定の行を取り除きたいこともあると思います。

そんな時はLinuxのコマンドラインで以下のように簡単にワンライナーで行う事ができます。

$ (sort -u list.txt ; cat remove.txt) |sort |uniq -u

list.txtは重複行を取り除きたい元のテキストファイル

remove.txtは取り除きたい行をリストにした除外用テキストファイル

例えばlist.txtとremove.txtが以下のような内容だったとします。

list.extの内容

foo
junk2
hoge
bar
junk1
junk2
hoge
bar
bar
fuga
junk1
remove.txtの内容

junk1
junk2

この場合コマンドの実行結果は以下のようになります。

$ (sort -u list.txt ; cat remove.txt) | sort |uniq -u
bar
foo
fuga
hoge

具体的な便利な使い方としては、WordPressの更新情報サービスに設定するping先リストを作る時とかに役立ちます。

ネットから最新のping先サイトを集めて重複を気にせずにリスト化します。

さらに既にpingサービスを停止しているサイトリストもログの結果やネットから集めてリスト化しておきます。

後はコマンドを叩けばワンライナーで一発で目的のping先リストを作ることができます。

※リスト化する時に行末の空白や/(スラッシュ)の有無は気を付けて下さい。