- 締切済み
シェルスクリプト 重複削除
aaa,11 bbb,22 aaa,14 ccc,22 ddd,11 と行があるとして、カンマ区切りの左側が重複しないように最初にでてくるものだけをピックアップして aaa,11 bbb,22 ccc,22 ddd,11 と出力したいです。 ワンライナー先生お願いします。 一行じゃデキナイカナ?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- shuyamakawa
- ベストアンサー率67% (111/164)
回答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
- 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}}
質問者
お礼
回答ありがとうございました。 自己解決しました。 sort -u -t, -k1,1 inputfile で出来ました!
お礼
回答ありがとうございました。 自己解決しました。 sort -u -t, -k1,1 inputfile で出来ました!