メインコンテンツへスキップ
初級8分で読める

wcコマンドで行数・単語数・文字数をカウント

テキストファイルの行数、単語数、文字数を簡単にカウントできるwcコマンドの使い方を、実践的な活用例とオプションの組み合わせを交えて詳しく解説します。

実践編wcカウント統計テキスト処理基本コマンド

🎯 この記事で学べること

  • 1
    `wc`コマンドの基本的な使い方(行数・単語数・文字数のカウント)をマスターできます
  • 2
    各オプション(-l、-w、-m、-c)の使い分けと実践的な活用方法を理解できます
  • 3
    パイプラインで他のコマンドと組み合わせた効率的なデータ処理ができるようになります
  • 4
    ログ分析、コード統計、ファイル管理での実践的な使い方を身につけられます
  • 5
    大規模ファイルでも高速に処理するテクニックを学べます

読了時間: 約8

ファイルの「大きさ」を数えてみよう!

こんにちは!今回は、ファイルやテキストの「量」を数えるwcコマンドについて学んでいきましょう。

「このファイル、何行くらいあるんだろう?」「ブログ記事、何文字書いたかな?」そんな時に活躍するのがwc(Word Count)コマンドです。まるでワープロの文字カウント機能のように、ファイルの行数、単語数、文字数を一瞬で教えてくれますよ!

基本的な使い方

まずは基本の使い方から

wcコマンドは、何もオプションを付けないと3つの情報を表示してくれます:

# 基本構文
wc filename

# 実行例
wc sample.txt
# 出力: 10  50  300 sample.txt
#      行数 単語数 バイト数 ファイル名

左から順に「行数」「単語数」「バイト数」「ファイル名」が表示されます。覚えやすいですね!

# 複数ファイルもまとめて確認できます
wc file1.txt file2.txt file3.txt

# パイプで受け取ることもできます
echo "Hello World" | wc

数字の並び順を覚えるコツ:「行・単・バ」(ぎょう・たん・ば)と覚えると忘れません!

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

欲しい情報だけを表示する

全部の情報はいらない時もありますよね。そんな時はオプションで絞り込みましょう:

# 行数だけ知りたい(-l = lines)
wc -l filename.txt

# 単語数だけ知りたい(-w = words)
wc -w filename.txt

# 文字数を知りたい(-m = characters)
wc -m filename.txt

# バイト数を知りたい(-c = bytes)
wc -c filename.txt

# 一番長い行の長さは?(-L = max line length)
wc -L filename.txt

日本語などのマルチバイト文字を扱う時は、-m(文字数)と-c(バイト数)の違いに注意!日本語1文字は通常3バイトです。

各オプションを使いこなそう

行数カウント(-lオプション)で何ができる?

行数を数えるのは、ファイルの「長さ」を知る基本中の基本です:

# ソースコードは何行?
wc -l *.py

# ログにエントリはいくつある?
wc -l /var/log/syslog

# このディレクトリにファイルは何個?
ls -1 | wc -l

# エラーは何回発生した?
grep "ERROR" logfile.txt | wc -l

ls -1(数字の1)は、ファイル名を1行に1つずつ表示します。これをwc -lで数えれば、ファイル数がわかるんです!

単語数カウント(-wオプション)の活用法

文書やレポートを書く時、「何単語書いたかな?」って気になりますよね:

# レポートの単語数をチェック
wc -w essay.txt

# 全部のテキストファイルで合計何単語?
wc -w *.txt | tail -1

# 「Linux」という単語は何回出てくる?
grep -o "Linux" document.txt | wc -w

# CSVファイルには何列ある?
head -1 data.csv | tr ',' '\n' | wc -w

grep -oは、マッチした部分だけを1行ずつ出力します。これをwc -wで数えれば、特定の単語の出現回数がわかります!

文字数とバイト数(-m、-cオプション)の違い

日本語を扱う時は、この違いがとても重要です:

# 文字数を数える(人間が認識する文字の数)
wc -m japanese.txt

# バイト数を数える(ファイルの実際のサイズ)
wc -c japanese.txt

# 違いを実感してみましょう
echo "こんにちは" | wc -m  # 6(5文字 + 改行)
echo "こんにちは" | wc -c  # 16(UTF-8では1文字3バイト)

ファイルサイズを知りたい時は-c、文章の長さを知りたい時は-mを使いましょう。日本語では大きく違います!

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

🎮 理解度チェック

Q1: wc -l file.txtwc -w file.txtの違いは何ですか?

wc -l file.txtとwc -w file.txtの違いは何ですか?

実践的な使い方をマスターしよう

プロジェクトの規模を把握する

プログラミングをしていると、「このプロジェクト、どれくらいの規模なんだろう?」って思いますよね:

# JavaScriptのコード、全部で何行?
find . -name "*.js" -type f | xargs wc -l

# 言語別に集計してみよう
echo "Python files:"
find . -name "*.py" -exec wc -l {} + | tail -1
echo "JavaScript files:"
find . -name "*.js" -exec wc -l {} + | tail -1

# コメントと空行を除いた「実質的な」コード行数
grep -v "^#" script.sh | grep -v "^$" | wc -l

grep -vは「〜を含まない行」を表示します。^#はコメント行、^$は空行を意味します!

ログファイルの分析に大活躍

システム管理では、ログの「量」を把握することがとても重要です:

# エラーは何件発生した?
grep "ERROR" app.log | wc -l

# 14時台のアクセスは何件?
grep "2025-08-08 14:" access.log | wc -l

# 何人のユーザーがアクセスした?(重複除去)
awk '{print $1}' access.log | sort -u | wc -l

# 404エラー(ページが見つからない)は何回?
grep " 404 " access.log | wc -l

sort -uは重複を除去します。IPアドレスの重複を除去すれば、ユニークユーザー数がわかります!

ファイルの整理整頓に使う

ディレクトリの中身を数値で把握すると、整理がしやすくなります:

# ファイルとディレクトリ、それぞれ何個ある?
echo "Files: $(find . -maxdepth 1 -type f | wc -l)"
echo "Directories: $(find . -maxdepth 1 -type d | wc -l)"

# 空っぽのファイルが何個ある?(削除候補)
find . -type f -size 0 | wc -l

# 1MB以上の大きなファイルは何個?
find . -type f -size +1M | wc -l

パイプラインで真価を発揮!

grepと組み合わせて検索結果を数える

wcの本当の力は、他のコマンドと組み合わせた時に発揮されます:

# pythonプロセスは何個動いてる?
ps aux | grep python | wc -l

# 設定ファイルの「実際の」設定行数は?
grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$" | wc -l

# エラーの種類は何種類?
grep "ERROR" system.log | sort -u | wc -l

パイプライン(|)を使えば、「検索→カウント」という流れが簡単に作れます!

awkと連携してデータ分析

CSVファイルなどの構造化データの分析にも使えます:

# CSVファイルの大きさを調べる
echo "Rows: $(wc -l < data.csv)"
echo "Columns: $(head -1 data.csv | awk -F',' '{print NF}')"

# 3列目の値は何種類ある?
awk -F',' '{print $3}' data.csv | sort -u | wc -l

# 3列目が100より大きい行は何行?
awk '$3 > 100' data.txt | wc -l
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

🎮 理解度チェック

Q2: ディレクトリ内のファイル数を数える正しいコマンドは?

ディレクトリ内のファイル数を数える正しいコマンドは?

もっと便利な使い方

複数ファイルを比較する

たくさんのファイルがある時、どれが一番大きいか知りたいですよね:

# ファイルサイズ順に並べる
wc -c *.txt | sort -n

# 行数が少ないログファイルTOP10
wc -l *.log | sort -n | head -10

# 一番長いテキストファイルはどれ?
wc -l *.txt | sort -nr | head -1

sort -nは数値順でソート、-rを付けると逆順(大きい順)になります!

スクリプトで自動レポート作成

定期的にファイルの統計を取りたい時は、スクリプト化しましょう:

#!/bin/bash
# ファイル統計レポート

echo "ファイル統計レポート"
echo "==================="

for file in *.txt; do
    if [ -f "$file" ]; then
        lines=$(wc -l < "$file")
        words=$(wc -w < "$file")
        chars=$(wc -m < "$file")
        echo "$file: $lines 行、$words 単語、$chars 文字"
    fi
done

< "$file"を使うと、ファイル名が出力に含まれません。数値だけが欲しい時に便利です!

処理の進捗を表示する

大きなファイルを処理する時、「あとどれくらい?」を表示できます:

# まず全体の行数を数える
total_lines=$(wc -l < large_file.txt)
processed=0

while IFS= read -r line; do
    # ここで何か処理をする
    ((processed++))
    echo -ne "\r進捗: $processed/$total_lines 行完了"
done < large_file.txt

さらに高度な使い方

より効率的にカウントする

大量のファイルを扱う時の、ちょっとしたコツです:

# ファイル名を表示しない(数値だけ欲しい時)
wc -l < filename.txt

# 全ファイルの合計行数だけ知りたい
cat *.txt | wc -l

# findで見つけたファイルの合計行数
find . -name "*.log" -exec cat {} + | wc -l

-exec cat {} +は、見つかったファイルを全部catして、一度にwcに渡します。効率的!

条件を付けてカウント

「特定の条件を満たす行だけ」を数えたい時もありますよね:

# 80文字を超える長い行は何行?
awk 'length($0) > 80' file.txt | wc -l

# 空行じゃない行は何行?
grep -v "^$" file.txt | wc -l

# 実は、grepには行数カウント機能がある!
grep -c "pattern" file.txt  # wcを使わなくてもOK

大きなファイルでも高速に処理

巨大なファイルを扱う時は、効率が大切です:

# 悪い例:無駄にcatを使う
cat huge_file.txt | grep "pattern" | wc -l

# 良い例:grepの機能を活用
grep -c "pattern" huge_file.txt

# さらに高速:並列処理で複数ファイルを同時に
find . -name "*.log" | parallel "grep -c ERROR {}"

「猫の無駄遣い」(useless use of cat)は避けましょう。多くの場合、catは不要です!

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

🎮 理解度チェック

Q3: 日本語ファイルの文字数を正確に数えるには、どのオプションを使いますか?

日本語ファイルの文字数を正確に数えるには、どのオプションを使いますか?

日常的によく使うパターン

開発中によく使う場面

プログラミングをしていると、こんな統計が欲しくなります:

# TODOコメントがあと何個残ってる?
grep -r "TODO" . --include="*.py" | wc -l

# テストファイルは全部で何個?
find . -name "*test*.py" -o -name "*Test*.java" | wc -l

# 関数は何個定義した?(簡易版)
grep -E "^def |^function " *.py *.js 2>/dev/null | wc -l

システム管理で使う場面

システムの状態を数値で把握すると、管理がしやすくなります:

# このシステムにユーザーは何人?
wc -l < /etc/passwd

# インストール済みのパッケージは何個?
dpkg -l | grep "^ii" | wc -l

# 今動いているサービスは何個?
systemctl list-units --type=service --state=running | grep ".service" | wc -l

データ分析での活用

CSVファイルなどのデータを分析する時にも大活躍:

# データは何件ある?(ヘッダー行を除く)
tail -n +2 data.csv | wc -l

# 2列目の値は何種類?
cut -d',' -f2 data.csv | sort -u | wc -l

# 1行あたりの平均単語数を計算
total_words=$(wc -w < document.txt)
total_lines=$(wc -l < document.txt)
echo "1行あたり平均: $((total_words / total_lines))単語"

トラブルシューティング

よくある問題と解決法

うまくいかない時の対処法を知っておきましょう:

# ファイル名に空白が含まれる場合
find . -name "*.txt" -print0 | xargs -0 wc -l

# バイナリファイルの警告がうるさい時
wc -l file 2>/dev/null

# 権限エラーを無視したい時
find /var/log -name "*.log" 2>/dev/null | xargs wc -l 2>/dev/null

2>/dev/nullは、エラーメッセージを捨てる魔法の呪文です!

文字コードの問題に対処

日本語ファイルを扱う時は、文字コードに注意:

# Shift_JISファイルの文字数を正確に数える
iconv -f SHIFT_JIS -t UTF-8 japanese.txt | wc -m

# BOM(バイトオーダーマーク)を除外して数える
tail -c +4 utf8_with_bom.txt | wc -m

📝 まとめ

今回はwcコマンドについて学びました!

  • wcは行数・単語数・文字数を数える基本ツール
  • -lで行数、-wで単語数、-mで文字数、-cでバイト数
  • 日本語では-m(文字数)と-c(バイト数)の違いに注意
  • パイプラインで他のコマンドと組み合わせると超便利
  • ログ分析、コード統計、ファイル管理など用途は無限大

wcコマンドは地味に見えますが、実は毎日使うほど便利なコマンドです。特に「grep | wc -l」のパターンは、検索結果を数える定番の組み合わせ。ぜひ覚えて使いこなしてくださいね!

次はsedコマンドで文字列の置換を学びましょう。wcで数えたファイルの中身を、sedで編集できるようになりますよ!

YouTube動画で復習

動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。

wcは「Word Count」の略ですが、実は単語だけじゃなくて、行数も文字数も数えられる万能カウンターです!