Ubuntuのwcコマンドで行数・単語数・文字数を数える方法

コマンド

動作確認環境

本記事のコマンドは Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)で検証しています。Ubuntu 22.04 でも同様に使えますが、一部オプションが異なります(後述)。

Linuxでファイルの行数を数えたい、テキストの文字数を知りたい、そんなときに使うのが wc コマンドです。

結論から言うと、ファイルの行数は wc -l ファイル名、単語数は wc -w、バイト数は wc -c で確認できます。コマンド1つでこの3つをまとめて取得することも可能です。

本記事では実際に Ubuntu 24.04 の Docker コンテナで wc コマンドを実行し、その結果を載せています。ログファイルの行数確認やパイプとの組み合わせなど、現場でよく使うパターンも紹介します。

この記事のポイント

  • wc はデフォルトで行数・単語数・バイト数の3つをまとめて表示する
  • -l で行数のみ、-w で単語数のみ、-c でバイト数のみを取得できる
  • パイプ(|)と組み合わせると ls | wc -l のようにファイル数やプロセス数を数えられる
  • 末尾に改行がないファイルは wc -l の行数が1少なく表示される点に注意
  • Ubuntu 24.04 では GNU coreutils 9.4 の wc(9.4-3ubuntu6.2)が使える

目次

  1. wcコマンドとは
  2. 基本的な使い方(オプションなし)
  3. -l:行数を数える
  4. -w:単語数を数える
  5. -c:バイト数を確認する
  6. -m:文字数を数える(日本語対応)
  7. -L:最長行の文字数を調べる
  8. 複数ファイルを同時に指定する
  9. パイプとの組み合わせ
  10. 実践的なユースケース
  11. 注意点・よくある誤解
  12. バージョン確認と Ubuntu 22.04 との違い
  13. まとめ

wcコマンドとは

wc は「word count」の略で、ファイルやテキストの行数・単語数・バイト数(または文字数)を数えるコマンドです。GNU coreutils パッケージに含まれており、Ubuntu では最初からインストール済みです。

ファイルの規模感を把握するとき、ログの件数を確認するとき、パイプを使ってコマンド出力の行数を数えるときなど、日常的なLinux操作でよく登場します。

著者アイコン
著者アイコン

「単語数なんて使うの?」と思うかもしれませんが、シェルスクリプトでの行数カウントやパイプでの活用は頻繁に登場します。使い方を知っておくと地味に便利ですよ。

基本的な使い方(オプションなし)

オプションなしで wc ファイル名 を実行すると、行数・単語数・バイト数の3つがまとめて表示されます。

Ubuntu 24.04 の Docker コンテナで10行のテキストファイル(test.txt)に対して実行した結果は以下の通りです。




ubuntu@linuxlab: ~
$ wc test.txt
10 48 292 test.txt

出力の見方は左から 行数(10)・単語数(48)・バイト数(292)・ファイル名 です。この順番は固定されており、オプションで個別に取得した場合も同じ順番で表示されます。

wcコマンド基本オプション実行例(Ubuntu 24.04 LTS・実測)
wcコマンド基本オプション実行例(Ubuntu 24.04 LTS・実測)

-l:行数を数える

最もよく使うオプションが -l(エル)です。ファイルの行数のみを表示します。正確には「改行文字の数」を数えているので、末尾に改行がないファイルでは注意が必要です(後述)。




ubuntu@linuxlab: ~
$ wc -l test.txt
10 test.txt

ログファイルのエントリ数確認やプログラムのコード行数カウントなど、現場でとにかく使用頻度が高いオプションです。

-w:単語数を数える

-w オプションで単語数のみを表示します。「単語」とは空白・タブ・改行で区切られた文字の連続として定義されています。




ubuntu@linuxlab: ~
$ wc -w test.txt
48 test.txt

-c:バイト数を確認する

-c オプションはファイルのバイト数を表示します。英数字のみのASCIIテキストであれば文字数と一致しますが、日本語など多バイト文字を含む場合はバイト数 ≠ 文字数になります。




ubuntu@linuxlab: ~
$ wc -c test.txt
292 test.txt

ファイルサイズの簡易確認に使えますが、正確なサイズ確認には ls -lstat コマンドも合わせて使うのがおすすめです。

-m:文字数を数える(日本語対応)

-m オプションはロケール設定に従った「文字数」を表示します。UTF-8の日本語では1文字が3バイトですが、wc -m では1文字として数えます。

ただし、wc -m を日本語ファイルで正しく動かすには LANGLC_ALLja_JP.UTF-8 等に設定されている必要があります。Docker の素の Ubuntu イメージでは日本語ロケールパッケージが入っていないため、wc -mwc -c が同じ値を返すケースがあります。




ubuntu@linuxlab: ~
$ echo -n “こんにちは” | wc -c
15
$ echo -n “こんにちは” | wc -m
15
# ロケール未設定時は -c と同じ値になる
# 「こんにちは」は5文字 × 3バイト = 15バイト

注意

wc -m で日本語の「文字数」を正しく取得するには、locale -aja_JP.utf8 が表示される環境である必要があります。未設定の場合は wc -c(バイト数)と同じ値が返ります。

-L:最長行の文字数を調べる

-L(大文字のエル)オプションは、ファイル内で最も長い行の文字数(表示幅)を返します。コードのフォーマットチェックや設定ファイルの確認に便利です。




ubuntu@linuxlab: ~
$ wc -L test.txt
47 test.txt
# 最長行は 47 文字
wcコマンド オプション一覧(Ubuntu 24.04 LTS・実測確認済み)
wcコマンド オプション一覧(Ubuntu 24.04 LTS・実測確認済み)

複数ファイルを同時に指定する

ファイルを複数指定すると、各ファイルの結果と合計行が自動的に表示されます。




ubuntu@linuxlab: ~
$ wc file1.txt file2.txt
5 5 36 file1.txt
3 12 58 file2.txt
8 17 94 total

Ubuntu 24.04(coreutils 9.4)では --total=always オプションで合計行の表示を制御できます。これは 22.04 にはないオプションです(後述)。

パイプとの組み合わせ

wc の本領はパイプ(|)との組み合わせです。任意のコマンド出力の行数や単語数を瞬時に数えられます

wcコマンドのパイプ活用例(Ubuntu 24.04 LTS・実測)
wcコマンドのパイプ活用例(Ubuntu 24.04 LTS・実測)



ubuntu@linuxlab: ~
$ ls /etc | wc -l
74
$ ps aux | wc -l
4

Ubuntu 24.04 の Docker コンテナで実測したところ、/etc ディレクトリには74個のエントリが存在しました。実際の環境ではインストール済みパッケージによって数は異なります。

実践的なユースケース

①ログファイルのエントリ数確認

サーバー運用でよく使うのがログファイルの行数確認です。




ubuntu@linuxlab: ~
$ wc -l /var/log/nginx/access.log
5832 /var/log/nginx/access.log
$ grep “ERROR” /var/log/app.log | wc -l
12

②/etc/passwd でシステムユーザー数を確認

Ubuntu 24.04 の Docker コンテナで実測した結果、/etc/passwd には19行、つまり19のユーザーエントリが存在することを確認しました。




ubuntu@linuxlab: ~
$ wc -l /etc/passwd
19 /etc/passwd

③シェルスクリプトでのファイル行数チェック

シェルスクリプト内で wc -l の出力を変数に取り込む場合は、ファイル名が出力されないようにパイプか < リダイレクトを使います。




ubuntu@linuxlab: ~
$ lines=$(wc -l < test.txt)
$ echo “行数: $lines”
行数: 10
# wc -l < ファイル名 とすると数字のみ取得できる
# wc -l ファイル名 だとファイル名も含まれてしまう

注意点・よくある誤解

末尾改行なしのファイルは行数が変わる

正直、これは詰まりやすいポイントです。wc -l は正確には「改行文字の数」を数えています。末尾に改行のないファイルでは、最終行がカウントされません。

Ubuntu 24.04 の Docker コンテナで実測した結果を見てみましょう。




ubuntu@linuxlab: ~
$ printf “line1\nline2\nline3” > no_newline.txt
$ wc -l no_newline.txt
2 no_newline.txt
# 3行あるのに2と表示される
$ printf “line1\nline2\nline3\n” > with_newline.txt
$ wc -l with_newline.txt
3 with_newline.txt
# 末尾に改行を付けると正しく3行

注意

wc -l は改行文字の数を数えます。末尾に改行がない3行のファイルは 2 と表示されます。echo で作成したファイルは末尾に改行が付きますが、printf などでは付かないことがあります。シェルスクリプトで行数チェックをする場合は注意してください。

wc -c と wc -m の違い(日本語ファイル)

ASCII テキストでは wc -c(バイト数)と wc -m(文字数)は同じ値になります。しかし日本語のような多バイト文字では差が出ます。「こんにちは」は5文字ですが、UTF-8では15バイトです。ロケールが正しく設定された環境では wc -m が5を返します。

バージョン確認と Ubuntu 22.04 との違い

Ubuntu 24.04 でインストール済みの wc のバージョンは以下で確認できます。




ubuntu@linuxlab: ~
$ wc –version
wc (GNU coreutils) 9.4
Copyright (C) 2023 Free Software Foundation, Inc.
Written by Paul Rubin and David MacKenzie.
$ dpkg -s coreutils | grep Version
Version: 9.4-3ubuntu6.2
Ubuntu バージョン別 wc(coreutils)バージョン比較(実測)
Ubuntu バージョン別 wc(coreutils)バージョン比較(実測)

Docker コンテナ(ubuntu:22.04 / ubuntu:24.04)での実測結果を比較すると、Ubuntu 22.04 は GNU coreutils 8.32(パッケージ版 8.32-4.1ubuntu1.3)、Ubuntu 24.04 は GNU coreutils 9.4(パッケージ版 9.4-3ubuntu6.2)が搭載されています。

基本的なオプション(-l/-w/-c/-m/-L)はどちらも同じように使えますが、24.04 では --total=WHEN オプションが追加されています。これは複数ファイル指定時の合計行表示タイミングを制御するオプションで、auto/always/only/never が指定できます。

まとめ

Ubuntu の wc コマンドについてまとめます。

wcコマンド チートシート

  • wc ファイル名:行数・単語数・バイト数をまとめて表示
  • wc -l ファイル名:行数のみ表示(最頻出)
  • wc -w ファイル名:単語数のみ表示
  • wc -c ファイル名:バイト数のみ表示
  • wc -m ファイル名:文字数(マルチバイト対応)
  • wc -L ファイル名:最長行の文字数
  • ls /etc | wc -l:パイプでエントリ数を数える
  • wc -l < ファイル:スクリプト用・数字のみ取得
  • Ubuntu 24.04:GNU coreutils 9.4-3ubuntu6.2 を確認
  • Ubuntu 22.04:GNU coreutils 8.32-4.1ubuntu1.3 を確認

VPS でサーバーを運用しながら Linux を学んでいる方には、本記事と並行してコマンド体系を身につけるのがおすすめです。実際にVPS上でコマンドを動かすことで理解がぐっと深まります。VPS選びに迷っている方は、東京リージョンがある Vultr や DigitalOcean が入門向けです。

コメント

タイトルとURLをコピーしました