wcコマンドで行数・単語数をカウントする方法|パイプ連携やログ集計もコマンド


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドU-Z, ファイル・ディレクトリ管理コマンド > wcコマンドで行数・単語数をカウントする方法|パイプ連携やログ集計もコマンド
「ファイルの行数を数えたいけど、viで開いて最終行を見るしかないのか...」 「ログに何件エラーが出ているか、パッと確認する方法はないの?」 Linuxでファイルの行数やバイト数を数えるとき、真っ先に使うのが wc(ワードカウント)コマンドです。

この記事では、wc コマンド の実践的な使い方を解説します。
基本的な行数・単語数・バイト数のカウントはもちろん、grepfind とパイプで組み合わせた実務頻出パターン、シェルスクリプトでの活用法まで、現場で使えるテクニックをまとめました。

wcコマンドとは?(行数・単語数・バイト数を数える基本コマンド)

wc は「word count」の略で、ファイルの行数・単語数・バイト数をカウントして表示するコマンドです。

オプションなしで実行すると、行数・単語数・バイト数の3つが同時に表示されます。

# wcコマンドの基本(オプションなし) $ wc /etc/passwd 42 78 2245 /etc/passwd

左から順に「42行」「78単語」「2245バイト」「ファイル名」です。

ただし、実務では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

ASCII文字だけのファイルでは -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

※ 出力にはヘッダ行(USER PID ...)の1行が含まれるため、実際のプロセス数は「表示された数 - 1」です。正確に数えたい場合は 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

grepwc -l の組み合わせは、障害対応時のログ調査で毎回のように使います。必ず覚えておきましょう。

4. ユーザー数を確認する(/etc/passwd の行数)

/etc/passwd はユーザー1人につき1行なので、行数を数えればシステムに登録されているユーザー数がわかります。

# システムのユーザー数を確認する $ cat /etc/passwd | wc -l 42 # catを使わずに直接指定しても同じ結果 $ wc -l /etc/passwd 42 /etc/passwd

cat ファイル | wc -lwc -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

「設定ファイルの1行が異常に長くなっていないか」を確認する場面や、ターミナル幅に収まるかどうかの判断に使えます。

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 -cgrep | 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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る