Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

wc / sort / uniq

『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 ファイル重複していない行のみ表示します。
サンプルコード

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

# fruits.txt の内容:
# banana
# apple
# cherry
# apple
# banana
# cherry
# apple

# 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 fruits.txt
7 fruits.txt

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

echo "Hello World" | wc -w
2

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

sort fruits.txt
apple
apple
apple
banana
banana
cherry
cherry

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

sort -n scores.txt
3
9
10
42
100

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

sort fruits.txt | uniq -c
      3 apple
      2 banana
      2 cherry

『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 fruits.txt | uniq -d
apple
banana
cherry

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

sort -rn scores.txt
100
42
10
9
3
概要

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

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

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