例えば以下のようなデータから重複行を除く。
zzz
yyy
xxx
yyy
www
zzz
yyy
ソートしてよければ単にsortしてuniqすればOK。
→(2021/07/03追記)コメントにてsort -uでよいと教えていただきました。
% sort -u data.txt
www
xxx
yyy
zzz
ソートせず、一番最初に出てきたときのみ表示する場合は一工夫必要。
% awk '!a[$0]++' data.txt
zzz
yyy
xxx
www
各行に対して、まず「!a[$0]」が評価される。
連想配列「a[$0]」で行全体をキーとして値を取り出してみて、
初めてのキーなら「a[$0]」が0なので「!a[$0]」は1になるから行全体が表示される。
その後「++」されるので、「a[$0]」に値として1が入る。
そのため初めてでないなら「!a[$0]」がfalseになって表示されない。
という仕組みみたい。
よく考えるな…
一番最後に出てきたときのみ表示するなら以下かな。
% tac data.txt | awk '!a[$0]++' | tac
xxx
www
zzz
yyy
コメント
sort -u data.txt
順序保存しないのならsort|uniqではなくsort -uで良いのですね。
ありがとうございます。