Perlでファイル内の重複行を取り除く | でばぐめ -IT技術メモ-

でばぐめ -IT技術メモ-

主にハードウェア/ソフトウェアのプログラミングに関するブログです。


Perlでファイル内の重複行を削除して表示したい場合、リスト内の同じ値を取り除く場合同様、
ハッシュを使えば簡単にできます。

del_dup.pl

my %hash = ();

while(<>) {
print unless $hash{$_}++;
}


ファイル(happybirthday.txt)で実行した結果

% cat happybirthday.txt
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday Dear Tux!
Happy Birthday to You!
Happy Birthday Dear Tux!

% del_dup.pl happybirthday.txt
Happy Birthday to You!
Happy Birthday Dear Tux!


ファイル内容をソートして、重複行を削除する場合、UNIXコマンドでもできる。

sort happybirthday.txt | uniq


もしくは

sort -u happybirthday.txt


Perlばかり触っていると、全てPerlでやろうとしてしまいます。
一歩外から見ると、他の言語やコマンドの方が簡単にできたりします。
選択肢を数多く持つのが重要ですね。


関連書籍

初めてのPerl 第5版/Randal L. Schwartz

¥3,780
Amazon.co.jp

初心者にもわかりやすく書かれていますが、
全くの初心者というより、少しPerlに慣れてきた時に威力を発揮する本です。
簡単なテキスト操作のためにPerlを使用するのであれば十分事足ると思います。

プログラミングPerl〈VOLUME1〉/ラリー ウォール

¥5,565
Amazon.co.jp

ページ数も多く、価格もそれなりなので、Perlについて詳しく知りたい人向けです。
"初めてのPerl"と重複する箇所も多々あるので、これからがっちりPerlを身につけたい人は
こちらをおすすめします。