uniq コマンドは各入力行を直前の行と比較します。隣接する同一行のグループをまとめ、数え、選択できますが、ファイル全体に散らばった重複は検索しません。
テキスト操作 · レッスン 14
uniq (重複なし)
uniq を使い、隣接する同一行のグループをまとめ、数え、絞り込む方法を学びます。
隣接する重複行をまとめる
reading.txt にグループ化された値があるとします。
book
book
paper
paper
article
article
magazine
絞り込みオプションなしの uniq は、各隣接グループから代表 1 行を表示します。
$ uniq reading.txt
book
paper
article
magazine
結果は stdout へ送られるため、入力ファイルは変わりません。
uniq reading.txt は標準で何をしますか?
隣接グループを数える
-c は、各出力グループの前に連続する入力行数を付けます。
$ uniq -c reading.txt
2 book
2 paper
2 article
1 magazine
同じ行をあらかじめ隣接させていなければ、これは全体の合計ではなく連続長です。
uniq -c の数値は何を表しますか?
一意または重複したグループを選ぶ
-u は 1 行だけのグループ、-d は 2 行以上の各隣接グループから代表 1 行を表示します。
$ uniq -u reading.txt
magazine
$ uniq -d reading.txt
book
paper
article
GNU uniq -D は重複グループ内の全行を表示しますが、小文字の -d はグループごとに値を 1 回だけ表示します。
ちょうど 1 回だけ現れる隣接グループだけを表示するコマンドはどれですか?
複数回現れる各隣接グループにつき 1 行を表示するコマンドはどれですか?
離れた重複をグループ化する
同一行が離れていると別のグループになります。
book
paper
book
paper
article
magazine
article
隣が異なるため、uniq は何もまとめません。
$ uniq reading.txt
book
paper
book
paper
article
magazine
article
順序を変えてよい場合は、先に並べ替えて同じ完全な行を隣接させます。
$ sort reading.txt | uniq
article
book
magazine
paper
両段階で一貫したロケールと比較方針を使います。sort -u reading.txt なら、1 コマンドで並べ替え、等しいキーごとに 1 行を残せます。
同じ行が reading.txt 内に散らばり、出力順を変えてもよい場合、完全な各行を 1 つずつ並べて出力するパイプラインはどれですか?
入力ファイルがなければ uniq は stdin を読むため、sort の後で自然に使えます。GNU の -i は大文字小文字を無視し、-f、-s、-w は比較領域を飛ばしたり制限したりできます。行の一部で同一性を定義するときだけ使います。
重複のグループ化、集計、絞り込みを練習するには、次のラボを試してください。
- Linux uniq コマンド:重複の絞り込み -
sortとuniqで重複行を特定、絞り込み、分析します。 - Linux sort コマンド:テキストの並べ替え -
uniqの前処理に重要なsortを練習します。 - 単語数の集計と並べ替え -
wcとsortでテキストを分析します。
レッスン完了
uniq (重複なし) を完了しました
uniq で隣接する同一行のグループを分析できるようになりました。
隣接する各重複グループを 1 行へまとめる。
-cで連続する出現数を数える。-uで単独グループを選ぶ。-dまたは GNU-Dで重複グループを選ぶ。離れた重複をまとめる必要がある場合は先に並べ替える。