• 締切済み

シェルスクリプト 重複削除

aaa,11 bbb,22 aaa,14 ccc,22 ddd,11 と行があるとして、カンマ区切りの左側が重複しないように最初にでてくるものだけをピックアップして aaa,11 bbb,22 ccc,22 ddd,11 と出力したいです。 ワンライナー先生お願いします。 一行じゃデキナイカナ?

みんなの回答

回答No.2

以下で出来ると思います。 処理対象行数がとてつもなく多い場合のメモリ消費量とかは考慮していません。 (当該スクリプトでは行数に比例してメモリ使用量が増加するので、 それが問題となる場合は何らかの対策をする必要があります。) >cat input.txt aaa,11 bbb,22 aaa,14 ccc,22 ddd,11 >awk 'BEGIN{FS=","}{if(a[$1]==0){print $0};++a[$1]}' input.txt aaa,11 bbb,22 ccc,22 ddd,11

muuming2001
質問者

お礼

回答ありがとうございました。 自己解決しました。 sort -u -t, -k1,1 inputfile で出来ました!

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

powershellなら簡単にワンライナーになるけど、bashだとsedやらawkやらでがんばらないと難しそう。最近のlinuxはpowershellをインストールすることも可能なので試してみては? $lines=@" aaa,11 bbb,22 aaa,14 ccc,22 ddd,11 "@ -split "`n" $lh=@{};$lines|%{$left=$_ -replace ",.*","";if(!$lh.$left){$_;$lh.$left=$true}}

muuming2001
質問者

お礼

回答ありがとうございました。 自己解決しました。 sort -u -t, -k1,1 inputfile で出来ました!