Posted at

ソートしないで重複行を削除する

More than 3 years have passed since last update.

uniq コマンドは事前にデータをソートしておく必要がありますが、ソートされていないデータから重複する行を削除したいこともありますよね。そんなときは

awk '!a[$0]++' FILE

これだけです。


解説


  • a は連想配列の変数で名前は何でもいいです

  • $0 には行全体が格納されています

  • つまり各行をキーとする連想配列を作成し、同じ行が現れるたびに値をインクリメントします

  • ! により値が 0 のとき、つまり最初にその行が現れたときだけ条件が真になります

  • アクション部分は省略されているので行全体が表示されます