本文へスキップ
BecomeCoder

Linuxコマンドコース · 第3章 パイプとフィルタ · レッスン15

uniq ― 重複をまとめて数える

ブラウザで完結

導入

uniq連続する重複行を1つにまとめます。「連続する」がポイントで、先に sort で同じ値を隣り合わせておくのが定石です。sort | uniq -c は「値ごとの件数を数える」ための黄金コンビです。

説明

まず sort で並べ、uniq で重複を1つにまとめます。

cut -d , -f 3 data.csv | tail -n +2 | sort | uniq

-c(count)を付けると、各行が何回出たかを頭に付けてくれます。これが集計の核心です。

cut -d , -f 3 data.csv | tail -n +2 | sort | uniq -c

さらに件数で並べ替えれば、「多い順ランキング」が完成します。sort -rn は数値の大きい順でしたね。

cut -d , -f 3 data.csv | tail -n +2 | sort | uniq -c | sort -rn

この ... | sort | uniq -c | sort -rn は、ログ解析でもアンケート集計でも使う万能パターンです。丸ごと覚えてしまいましょう。

やってみよう

... | sort | uniq... | sort | uniq -c を打ち比べて、-c が件数を付けてくれるのを確かめましょう。最後に | sort -rn を足して、多い順に並ぶのを見てください。

演習

data.csv の都市(3列目)ごとの人数を数え、多い順に並べてください。

ヒント1を見る

万能パターン ... | sort | uniq -c | sort -rn を使います。

ヒント2を見る

cut -d , -f 3 data.csv | tail -n +2 | sort | uniq -c | sort -rn

実際に動かしてみよう

下の端末にコマンドを打って Enter を押すと、その場で結果が返ります。本文で出てきたコマンドを実際に試しながら進めましょう(ファイルを消しても「最初からやり直す」で元に戻ります)。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。