言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. wc / sort / uniq

wc / sort / uniq

対応: Bash 1.0(1989)

『wc』はファイルの行数・単語数・バイト数をカウントし、『sort』は行を並べ替え、『uniq』は連続する重複行を削除するコマンドです。テキスト処理のパイプでよく組み合わせて使います。

構文

wc [オプション] [ファイル...]
sort [オプション] [ファイル...]
uniq [オプション] [ファイル...]

オプション一覧

コマンド / オプション概要
wc ファイル行数・単語数・バイト数を表示します。
wc -l ファイル行数のみ表示します。
wc -w ファイル単語数のみ表示します。
wc -c ファイルバイト数のみ表示します。
wc -m ファイル文字数(マルチバイト対応)のみ表示します。
sort ファイル行を辞書順に並べ替えます。
sort -r ファイル逆順に並べ替えます。
sort -n ファイル数値として並べ替えます(10が9より大きくなります)。
sort -h ファイル人間が読みやすい数値(1K・2M・3Gなど)として並べ替えます。
sort -k N ファイルN番目のフィールドを基準に並べ替えます。
sort -u ファイル並べ替え後に重複行を削除します。
sort -t 区切り文字 ファイルフィールドの区切り文字を指定します。
uniq ファイル連続する重複行を1行にまとめます(事前に sort が必要)。
uniq -c ファイル各行の出現回数を先頭に付けて表示します。
uniq -d ファイル重複していた行のみ表示します。
uniq -u ファイル重複していない行のみ表示します。

サンプルコード

以下のファイルを例に説明します。

fighters.txt
Terry Bogard
Iori Yagami
Kusanagi Kyo
Iori Yagami
Terry Bogard
Kusanagi Kyo
Iori Yagami
scores.txt
100
9
42
10
3
access.log
192.168.1.100
192.168.1.101
192.168.1.100
10.0.0.1
192.168.1.100
192.168.1.101

『wc -l』でファイルの行数を数えます。

wc -l fighters.txt
7 fighters.txt

『wc -w』で単語数、『wc -c』でバイト数を数えます。

echo "Hello World" | wc -w
2

『sort』でアルファベット順に並べ替えます。

sort fighters.txt
Iori Yagami
Iori Yagami
Iori Yagami
Kusanagi Kyo
Kusanagi Kyo
Terry Bogard
Terry Bogard

『sort -n』で数値として並べ替えます。『-n』がないと辞書順("10" が "3" より前)になります。

sort -n scores.txt
3
9
10
42
100

『sort | uniq』で重複を除きます。『uniq -c』で出現回数を表示します。

sort fighters.txt | uniq -c
      3 Iori Yagami
      2 Kusanagi Kyo
      2 Terry Bogard

『sort | uniq -c | sort -rn』は出現頻度ランキングを作る定番パターンです。

sort access.log | uniq -c | sort -rn
      3 192.168.1.100
      2 192.168.1.101
      1 10.0.0.1

『uniq -d』で重複していた行のみ、『uniq -u』で重複していない行のみ表示します。

sort fighters.txt | uniq -d
Iori Yagami
Kusanagi Kyo
Terry Bogard

『sort -r』で逆順に並べ替えます。

sort -rn scores.txt
100
42
10
9
3

概要

$ sort | uniq -c | sort -rn』は「出現頻度ランキング」を作る定番のパイプパターンです。ログ解析でよく使います。

注意点として、『$ uniq』は連続する重複行しか処理しません。ファイル全体で重複を除くには、必ず事前に『$ sort』を実行してください。テキスト検索には『grep』も組み合わせて使います。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。