awkで簡単にできます:
awk '!seen[$0]++'
はじめに
コマンドで重複行を排除して一度だけ表示する方法の備忘録を残します。
The English translation of this post is here.
コマンドで重複行を排除して一度だけ表示する
下記コマンドで、重複行を排除して一度だけ表示可能です:
awk '!seen[$0]++'
コマンド解説
awk '!seen[$0]++'
$0: 現在処理している行全体seen[$0]: "現在処理している行全体"をキーとする連想配列"seen"の値seen[$0]++: "現在処理している行全体"をキーとする連想配列"seen"の値をインクリメント- その行が初めて出てきた場合: 未定義 → 0
- その行が既にカウントされている場合: 値が1増加
!seen[$0]++: NOT演算子付きでbool判定- その行が初めて出てきた場合:
!0= true - その行が既にカウントされている場合:
!1(以上)= false
- その行が初めて出てきた場合:
awk '!seen[$0]++': その行が初めて出てきた場合のみtrueとなり表示
よって、このコマンドで重複行を排除して一度だけ表示することができます。
実行例
下記のようなファイルlist.txtの内容を、先ほどのコマンドで重複行を排除して表示してみます。
apple banana apple orange banana grape apple
実行コマンド:
cat list.txt | awk '!seen[$0]++'
出力結果:
apple banana orange grape
このように、重複行を排除して一度だけ表示されることが確認できました。
おわりに
以上、コマンドで重複行を排除して一度だけ表示する方法のメモでした。
どなたかの参考になれば幸いです。
[関連記事]