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』も組み合わせて使います。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。