重複行削除

コマンドラインやエディタによる、テキストファイルから重複行を削除する方法です。

 

1 . 入力データ

データ作成。

$ cat << EOF > manga.txt
> Dragon Ball(ドラゴンボール)
> Naruto(ナルト)
> Fullmetal Alchemist(鋼の錬金術師)
> Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)
> One Piece(ワンピース)
> Monster
> Dragon Ball(ドラゴンボール)
> Nausicaä of the Valley of the Wind(風の谷のナウシカ)
> Hunter × Hunter
> EOF

「ドラゴンボール」が重複

$ cat manga.txt 
Dragon Ball(ドラゴンボール)
Naruto(ナルト)
Fullmetal Alchemist(鋼の錬金術師)
Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)
One Piece(ワンピース)
Monster
Dragon Ball(ドラゴンボール)
Nausicaä of the Valley of the Wind(風の谷のナウシカ)
Hunter × Hunter

2 . sortコマンド重複行削除

$ sort -u manga.txt 
Dragon Ball(ドラゴンボール)
Fullmetal Alchemist(鋼の錬金術師)
Hunter × Hunter
Monster
Naruto(ナルト)
Nausicaä of the Valley of the Wind(風の谷のナウシカ)
One Piece(ワンピース)
Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)

3 . sort+uniqコマンド重複行削除

$ sort manga.txt | uniq
Dragon Ball(ドラゴンボール)
Fullmetal Alchemist(鋼の錬金術師)
Hunter × Hunter
Monster
Naruto(ナルト)
Nausicaä of the Valley of the Wind(風の谷のナウシカ)
One Piece(ワンピース)
Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)

uniq の c オプションで重複行の確認ができる。

$ sort manga.txt | uniq -c
      2 Dragon Ball(ドラゴンボール)
      1 Fullmetal Alchemist(鋼の錬金術師)
      1 Hunter × Hunter
      1 Monster
      1 Naruto(ナルト)
      1 Nausicaä of the Valley of the Wind(風の谷のナウシカ)
      1 One Piece(ワンピース)
      1 Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)

4 . awkコマンド重複行削除 ソート不要

$ awk '!x[$0]++' manga.txt 
Dragon Ball(ドラゴンボール)
Naruto(ナルト)
Fullmetal Alchemist(鋼の錬金術師)
Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)
One Piece(ワンピース)
Monster
Nausicaä of the Valley of the Wind(風の谷のナウシカ)
Hunter × Hunter

5 . viエディタ重複行削除

:sort u
Dragon Ball(ドラゴンボール)
Fullmetal Alchemist(鋼の錬金術師)
Hunter × Hunter
Monster 
Naruto(ナルト) 
Nausicaä of the Valley of the Wind(風の谷のナウシカ)
One Piece(ワンピース)
Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)

6 . perlワンライナー重複行削除

$ perl -ne 'print if ! $x{$_}++' manga.txt 
Dragon Ball(ドラゴンボール)
Naruto(ナルト)
Fullmetal Alchemist(鋼の錬金術師)
Rurouni Kenshin(るろうに剣心 -明治剣客浪漫譚-)
One Piece(ワンピース)
Monster
Nausicaä of the Valley of the Wind(風の谷のナウシカ)
Hunter × Hunter