はじめに
その必要はないわ。 nikkieです。
今回取り上げるのは小ネタです。
最近知ってえらく驚きました
目次
sortの-uオプション!?
『マスタリングLinuxシェルスクリプト 第2版』をパラパラ眺めていたnikkie氏。
[†4] 訳注:sortコマンドの-uオプションはソートを行ったうえで同じ内容の行を1行に集約して出力するオプションです。sort | uniqと同じ動作になります。(12.2.2より)
まじか、ずっとsort | uniqしてきたよ...
% cat girls.txt こころ アキ こころ フウカ % sort girls.txt アキ こころ こころ フウカ
% sort girls.txt | uniq
アキ
こころ
フウカ
% sort -u girls.txt アキ こころ フウカ
マニュアル確認
せっかくなので、マニュアルのうち今回のトピックに関係する箇所だけ確認しましょう。
macOSのzshで確認しています。
% echo "$SHELL" /bin/zsh % /bin/zsh --version zsh 5.8.1 (x86_64-apple-darwin21.0)
man uniq
Repeated lines in the input will not be detected if they are not adjacent, so it may be necessary to sort the files first.
uniqの前にsortが必要な理由が述べられています。
(意訳)入力の中の繰り返される行は、それらが隣接していない場合検出されない。
なので、最初にファイルの中身をソートするのが必要かもしれない
% uniq girls.txt こころ アキ こころ フウカ
man sort
-u, --unique
Unique keys.
Suppress all lines that have a key that is equal to an already processed one.
(意訳)すでに処理されたキーと等しいキーを持つ行すべてを抑制する
つまり、重複がなくなるということですね。
sort | uniq との出会い
出会いはLinuxの(かつての1)資格試験、LPIC レベル1のテキスト2です。
ここでsort | uniqを叩き込まれ、重複行のあるファイルに対して行数を出すシーンで活用してきました。
一例:JSONLinesからjqで特定フィールドの値を取り出して、取りうる値が何種類かを確認する
資格取得の上でも実務でもsort | uniqをそれ以外の方法がないものと思い込んで、しばしば使ってきました(常中)。
まさかsort -uでできたなんて!(教えてよ!テキストさん〜)
終わりに
sort | uniqを使っていたがsort -uでよかったという、最近の学び(衝撃的)を共有しました。
uniqにパイプする必要はないわ!
逆にsort -uがある中で、uniq自体のユースケース(使い所)ってどんなものがあるんだろう?(宿題)
- LinuCになったと、お噂はかねがね漏れ聞いております。https://linuc.org/↩
- ↩