• ベストアンサー

Perlで重複行を削除したい

あ b c d e e g あ b c d e e g い b c d e e g い c c d e e g 上記のようなCSVデータ(タブ区切り)が100行くらいあるのですが、1列目にある、あ、あ、い、いは無視して、2列目以降のデータのみで重複を比較して同じ行は削除したいのですがどのようにすればよいでしょうか? 下記コードを応用すれば分かりそうなのですが、自分で作ることができませんでした。 どなたか、教えていただけ無いでしょうか? 宜しくお願い致します。 open(OUT, "$file"); @array = <OUT>; close(OUT); my %count; @array = grep(!$count{$_}++, @array); print @array;

質問者が選んだベストアンサー

  • ベストアンサー
  • t140
  • ベストアンサー率39% (59/150)
回答No.2

@array = grep(!$count{$_}++, @array);           ↓ @array = grep(!$count{(split(/\t/, $_, 2))[1]}++, @array); #ハッシュのキーに2列目以降をセット

ayu_mi_nic
質問者

お礼

更なる改良ありがとうございました!!

その他の回答 (2)

  • okiyoshi
  • ベストアンサー率34% (11/32)
回答No.3

t140さん wrote > @array = grep(!$count{(split(/\t/, $_, 2))[1]}++, @array); # おお! こちらの方が断然いいですね。 # 勉強させてもらいました!

  • okiyoshi
  • ベストアンサー率34% (11/32)
回答No.1

my %count; @array = grep{ my $line = $_; $line =~ s/^.*?\t//; !$count{$line}++; } @array; # で、どうでしょう?

ayu_mi_nic
質問者

お礼

動作もばっちりで、とても助かりました。 回答いただきありがとうございました!!

関連するQ&A