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


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

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

これだけです。

解説

  • a は連想配列の変数で名前は何でもいいです
  • $0 には行全体が格納されています
  • つまり各行をキーとする連想配列を作成し、同じ行が現れるたびに値をインクリメントします
  • ! により値が 0 のとき、つまり最初にその行が現れたときだけ条件が真になります
  • アクション部分は省略されているので行全体が表示されます