🎯 この記事で学べること
- 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
数字の並び順を覚えるコツ:「行・単・バ」(ぎょう・たん・ば)と覚えると忘れません!
ファイルツリー
欲しい情報だけを表示する
全部の情報はいらない時もありますよね。そんな時はオプションで絞り込みましょう:
# 行数だけ知りたい(-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
を使いましょう。日本語では大きく違います!
ファイルツリー
🎮 理解度チェック
Q1: 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
ファイルツリー
🎮 理解度チェック
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は不要です!
ファイルツリー
🎮 理解度チェック
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」の略ですが、実は単語だけじゃなくて、行数も文字数も数えられる万能カウンターです!