wc(ワードカウント)コマンドです。この記事では、
wc コマンド の実践的な使い方を解説します。基本的な行数・単語数・バイト数のカウントはもちろん、
grep や find とパイプで組み合わせた実務頻出パターン、シェルスクリプトでの活用法まで、現場で使えるテクニックをまとめました。wcコマンドとは?(行数・単語数・バイト数を数える基本コマンド)
wc は「word count」の略で、ファイルの行数・単語数・バイト数をカウントして表示するコマンドです。オプションなしで実行すると、行数・単語数・バイト数の3つが同時に表示されます。
# wcコマンドの基本(オプションなし) $ wc /etc/passwd 42 78 2245 /etc/passwd
ただし、実務では3つ同時に知りたい場面は少なく、ほとんどの場合は
-l(行数だけ)のようにオプションを付けて使います。基本オプション一覧(-l / -w / -c / -m)
wc でよく使うオプションを順番に見ていきましょう。1. 行数をカウントする(-l)
最も使用頻度が高いのが-l(lines)オプションです。ファイルが何行あるか確認できます。# ファイルの行数を表示する $ wc -l /etc/passwd 42 /etc/passwd
2. 単語数をカウントする(-w)
-w(words)オプションは、スペースやタブ、改行で区切られた「単語」の数をカウントします。# ファイルの単語数を表示する $ wc -w /etc/passwd 78 /etc/passwd
3. バイト数をカウントする(-c)
-c(bytes)オプションは、ファイルのバイト数(サイズ)を表示します。# ファイルのバイト数を表示する $ wc -c /etc/passwd 2245 /etc/passwd
ls -l で見えるファイルサイズと同じ値が返ります。ファイルサイズを変数に取得したい場合など、スクリプトで使う場面があります。4. 文字数をカウントする(-m)
-m(chars)オプションは、バイト数ではなく「文字数」をカウントします。# ファイルの文字数を表示する $ wc -m /etc/passwd 2245 /etc/passwd
-c と -m の結果は同じです。違いが出るのは日本語などのマルチバイト文字を含むファイルで、この点は後述のセクションで詳しく解説します。パイプとの組み合わせ(実務で最も使うパターン)
wc の真価は、パイプ(|)で他のコマンドと組み合わせた時に発揮されます。実務で頻出する5つのパターンを紹介します。1. ファイル数をカウントする(ls | wc -l)
ディレクトリ内のファイル数を手早く確認するには、ls の出力を wc -l に渡します。# カレントディレクトリのファイル数を数える $ ls | wc -l 15 # /var/log/ 配下のファイル数を数える $ ls /var/log/ | wc -l 28
ls の出力にはディレクトリも含まれます。ファイルだけを正確に数えたい場合は、後述の find を使う方法がおすすめです。2. プロセス数を確認する(ps aux | wc -l)
現在動いているプロセスの数をざっくり確認する場合に使います。# 動作中のプロセス数を確認する $ ps aux | wc -l 128
ps aux --no-headers | wc -l を使ってください。3. エラー件数を数える(grep | wc -l)
ログファイルからエラーが何件発生しているか確認する、実務で非常に多いパターンです。# /var/log/messages 内の ERROR の件数を数える $ grep "ERROR" /var/log/messages | wc -l 37 # 大文字・小文字を区別せずにカウントする $ grep -i "error" /var/log/messages | wc -l 42 # 特定の日付のエラーだけを数える $ grep "Mar 15" /var/log/messages | grep "ERROR" | wc -l 5
grep と wc -l の組み合わせは、障害対応時のログ調査で毎回のように使います。必ず覚えておきましょう。4. ユーザー数を確認する(/etc/passwd の行数)
/etc/passwd はユーザー1人につき1行なので、行数を数えればシステムに登録されているユーザー数がわかります。# システムのユーザー数を確認する $ cat /etc/passwd | wc -l 42 # catを使わずに直接指定しても同じ結果 $ wc -l /etc/passwd 42 /etc/passwd
cat ファイル | wc -l と wc -l ファイル の違いは、後者だとファイル名が一緒に表示される点だけです。スクリプトで数値だけ取得したい場合は cat を経由するか、後述の方法を使ってください。5. ディレクトリ内のファイル総数を正確に数える(find | wc -l)
サブディレクトリ内も含めてファイルの総数を正確にカウントするには、find と組み合わせます。# /var/log/ 配下のファイル総数(サブディレクトリ含む) $ find /var/log/ -type f | wc -l 156 # .log ファイルだけを数える $ find /var/log/ -type f -name "*.log" | wc -l 23 # ディレクトリの数だけを数える $ find /etc/ -type d | wc -l 85
find -type f ならファイルだけ、-type d ならディレクトリだけを正確にカウントできます。ls | wc -l よりも信頼性の高い方法です。複数ファイルを指定した場合の合計行(total)
wc にファイルを複数指定すると、各ファイルの結果に加えて最終行に total(合計) が表示されます。# 複数ファイルの行数を一度に確認する $ wc -l /etc/passwd /etc/group /etc/shadow 42 /etc/passwd 65 /etc/group 42 /etc/shadow 149 total
# /var/log/ 配下の .log ファイルの行数をまとめて確認する $ wc -l /var/log/*.log 1024 /var/log/boot.log 5678 /var/log/cron.log 3210 /var/log/maillog 9912 total
最長行の文字数を調べる(-L オプション)
-L(max-line-length)オプションは、ファイル内で最も長い行の文字数を表示します。# 最長行の文字数を確認する $ wc -L /etc/httpd/conf/httpd.conf 197 /etc/httpd/conf/httpd.conf
wc -c と wc -m の違い(バイト数と文字数)
ASCII文字(英数字・半角記号)だけのファイルでは-c と -m の結果は一致しますが、日本語を含むファイルでは結果が変わります。# 日本語を含むファイルで比較する $ echo "Linuxサーバー" > /tmp/test.txt $ wc -c /tmp/test.txt 22 /tmp/test.txt $ wc -m /tmp/test.txt 10 /tmp/test.txt
-c はバイト数を数えるので、UTF-8で1文字3バイトの日本語はバイト数が大きくなります。一方 -m は文字数として「1文字は1」とカウントします。・wc -c:ファイルサイズ(バイト数)を知りたい時に使う
・wc -m:実際の文字数を知りたい時に使う
日本語のテキストファイルの文字数をカウントしたい場合は
-m を使ってください。実務Tips:シェルスクリプトでの活用例
wc はシェルスクリプトの中で条件分岐や監視に活用できます。実務で役に立つパターンを紹介します。1. ログのエラー件数が閾値を超えたら通知する
#!/bin/bash # エラーが100件を超えたらメールで通知するスクリプト ERROR_COUNT=$(grep -c "ERROR" /var/log/messages) if [ "$ERROR_COUNT" -gt 100 ]; then echo "エラーが${ERROR_COUNT}件検出されました" | mail -s "Alert" admin@example.com fi
grep -c は grep | wc -l と同じ結果を返しますが、パイプが不要な分シンプルです。スクリプト内では grep -c のほうが便利な場面が多いので覚えておきましょう。2. ファイル数を変数に取得する
#!/bin/bash # バックアップファイルの数を確認する FILE_COUNT=$(find /backup/ -type f -name "*.tar.gz" | wc -l) echo "バックアップファイル: ${FILE_COUNT}個"
3. 数値だけを取得する(ファイル名を表示しない)
wc -l ファイル名 とすると「42 /etc/passwd」のようにファイル名が付きます。数値だけ取得したい場合は、以下の方法があります。# 方法1: 標準入力から渡す(ファイル名が表示されない) $ cat /etc/passwd | wc -l 42 # 方法2: リダイレクトで渡す $ wc -l < /etc/passwd 42
wc -l < ファイル が最もシンプルな方法です。トラブルシュート:wcコマンドの注意点
【注意】改行なしの最終行はカウントされない
wc -l は正確には「改行文字(\n)の数」を数えます。そのため、ファイルの最終行に改行がないと、その行はカウントされません。# 改行なしのファイルを作成して確認 $ printf "line1\nline2\nline3" > /tmp/no_newline.txt $ wc -l /tmp/no_newline.txt 2 /tmp/no_newline.txt # 実際は3行あるが、最終行に改行がないため2と表示される
【注意】空白文字の扱い
wc -w の「単語」は、空白文字(スペース・タブ・改行)で区切られた文字列です。CSVやTSVのフィールド数を数える用途には向きません。フィールド数を正確に数えたい場合は awk を使ってください。# CSVのフィールド数を数えるなら awk を使う $ head -1 data.csv | awk -F',' '{print NF}' 5
本記事のまとめ
wc コマンドの使い方を一覧表にまとめます。| やりたいこと | コマンド |
|---|---|
| 行数を数える | wc -l ファイル名 |
| 単語数を数える | wc -w ファイル名 |
| バイト数を数える | wc -c ファイル名 |
| 文字数を数える | wc -m ファイル名 |
| 最長行の文字数を調べる | wc -L ファイル名 |
| ファイル数をカウントする | ls /path/ | wc -l |
| プロセス数を確認する | ps aux | wc -l |
| エラー件数を数える | grep "ERROR" /var/log/messages | wc -l |
| ファイル総数を正確に数える | find /path/ -type f | wc -l |
| 数値だけ取得する(ファイル名なし) | wc -l < ファイル名 |
コマンドの使い方だけでなく「現場での組み合わせ方」を体系的に学びたいと思いませんか?
wcコマンドのように、単体ではシンプルでもパイプで組み合わせることで威力を発揮するコマンドはたくさんあります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方
