wcコマンド

コマンド
コマンド

wcは “word count” の略で、テキストファイルや標準入力の行数 (lines)、単語数 (words)、バイト数 (bytes)/文字数 (characters) をカウントするためのLinux/UNIXコマンドです。シンプルな機能ですが、パイプ(|)と組み合わせることで、様々な場面で非常に強力なツールとなります。

基本的な書式

wcコマンドの基本的な使い方は以下の通りです。

  • オプションを指定しない場合、行数 単語数 バイト数 ファイル名の順で表示されます。
  • ファイル名を省略するか、ハイフン(-)を指定すると、標準入力からデータを受け取ります。これはパイプと連携する際に使われます。
wc [オプション] [ファイル名1] [ファイル名2] ...

主要なオプション

特定のカウント結果だけを知りたい場合に、以下のオプションを使用します。

オプション説明
-l, --lines行数 (Lines) のみを表示します。改行文字 \n の数をカウントします。
-w, --words単語数 (Words) のみを表示します。スペース、タブ、改行などの空白文字で区切られた部分を「単語」としてカウントします。
-c, --bytesバイト数 (Bytes) のみを表示します。ファイルのサイズそのものを知りたい場合に便利です。
-m, --chars文字数 (Characters) のみを表示します。マルチバイト文字(例:日本語、絵文字)を正しく1文字としてカウントします。
-L, --max-line-lengthファイル内で最も長い行の長さ(文字数)を表示します。
wcコマンド
トークンをカウントする
OpenAIのトークン数をカウントする方法を解説。Linux標準コマンド(grep)を用いた手軽な近似値算出から、公式ライブラリ「tiktoken」を使った正確なPython自作コマンドの構築、APIレスポンスからの取得まで、精度と手軽さに応じた3つのアプローチを紹介します。

-c と -m の違い(重要)

wcを使いこなす上で、-c (バイト数) と -m (文字数) の違いを理解することは非常に重要です。

  • -c (--bytes): ファイルを構成するバイトの総数を数えます。ASCII文字(半角英数字など)は1文字1バイトですが、UTF-8エンコーディングの日本語のようなマルチバイト文字は、1文字が3バイトなどで表現されます。
  • -m (--chars): 文字コード(ロケール設定)を解釈し、文字の数を数えます。日本語1文字も、半角アルファベット1文字も、同様に「1文字」としてカウントします。

具体例

hello.txt というファイルに「hello」とだけ書かれているとします(5文字、改行なし)。

$ wc -c hello.txt
5 hello.txt

$ wc -m hello.txt
5 hello.txt

この場合、ASCII文字だけなのでバイト数と文字数は同じです。

次に、nihongo.txt というファイルに「こんにちは」とだけ書かれているとします(5文字、改行なし)。

# UTF-8の場合、日本語1文字は3バイト
$ wc -c nihongo.txt
15 nihongo.txt  # 5文字 * 3バイト = 15バイト

$ wc -m nihongo.txt
5 nihongo.txt   # 文字数として正しく5文字とカウント

このように、日本語などのマルチバイト文字を扱う場合は -m を使うと意図した通りの文字数が得られます。

wcコマンド
[Nginx]404・500エラー画面をカスタマイズ
Nginxで404や500のエラー画面をカスタマイズする方法を、サーバー全体の一括設定とプロジェクト別の個別設定の2パターンで解説。表示されない時の落とし穴や対策、テスト方法などの実践的な知見も紹介します。

実践的な使用例

1. 単一ファイルのカウント

# sample.txt の行数、単語数、バイト数を表示
$ wc sample.txt
 10  55 345 sample.txt

# sample.txt の行数のみ表示
$ wc -l sample.txt
 10 sample.txt

# sample.txt の単語数のみ表示
$ wc -w sample.txt
 55 sample.txt

2. 複数ファイルのカウント

複数のファイルを指定すると、各ファイルの結果と、最後に合計(total)が表示されます。

$ wc file1.txt file2.txt
  5  20 100 file1.txt
 10  45 230 file2.txt
 15  65 330 total

3. パイプ (|) を使った連携

wcの真価は、他のコマンドの出力を受け取って処理する際に発揮されます。パイプでデータを受け取った場合、ファイル名は表示されません。

例1: ディレクトリ内のファイル数を数える

ls -1(1行に1ファイル名ずつ表示)の出力を wc -l に渡すことで、カレントディレクトリ内のアイテム(ファイルとディレクトリ)の総数を数えられます。

$ ls -1 | wc -l
25

例2: ログファイルから特定のエラー行数を数える

grepコマンドで特定の文字列(例: ERROR)を含む行を抽出し、その結果を wc -l に渡すことで、エラーの発生回数をカウントできます。

# access.log ファイルから \"ERROR\" を含む行が何行あるか調べる
$ grep \"ERROR\" access.log | wc -l
152

例3: コマンドのエイリアスの数を数える

aliasコマンドの出力を wc -l に渡して、設定されているエイリアスの数を数えます。

$ alias | wc -l
18

応用テクニック

1. ソートと組み合わせて行数ランキング

wc -l *.log | sort -nr

出力例:

   120 error.log
    85 access.log
    30 debug.log
     2 total

2. 単語数の多いファイルトップ5を検出

wc -w * | sort -nr | head -6

3. 空行を除外した行数カウント

grep -v \'^$\' file.txt | wc -l

4. 特定の拡張子の文字数合計

wc -m *.py | awk \'END{print $1}\'

5. バイト数と文字数の違いを確認(マルチバイト文字)

echo \"日本語\" | wc -c  # バイト数(UTF-8なら9)
echo \"日本語\" | wc -m  # 文字数(3)

トラブルシューティング

  1. バイナリファイルの誤処理
   # バイナリファイルをテキストとして処理しない
   wc -c binaryfile  # バイト数のみ安全
  1. 大量ファイルのメモリ使用
   # 巨大ファイルは分割処理
   split -l 1000000 bigfile.txt part-
   wc -l part-*
  1. 改行コードの違い(Windowsファイル)
   # CRLF → LF 変換
   dos2unix windowsfile.txt
   wc -l windowsfile.txt

便利なエイリアス例

.bashrc に追加:

# ファイル統計の詳細表示
alias fstat=\'wc -lwm\'

# ディレクトリ内のソースコード行数集計
alias codesum=\'find . -name \"*.py\" -o -name \"*.js\" | xargs wc -l\'

wc コマンドはシンプルながら、ログ分析やコード統計、システム管理など多様な場面で活用できます。他のコマンドと組み合わせることで、より強力なテキスト処理が可能になります!

まとめ

wcコマンドは、一見地味ですが、Linuxの哲学である「小さなツールをパイプで組み合わせて大きな仕事をする」を体現する、非常に便利で強力なコマンドです。特に -l オプションは、他のコマンドと組み合わせることで、様々な「数を数える」という作業を効率化してくれます。

困ったときは man wc または wc --help で詳細な使い方を確認できます。

Q よくある質問 (FAQ)
Q. wcコマンドで日本語などのマルチバイト文字の文字数を正しくカウントするにはどうすればよいですか?
A.
-m(--chars)オプションを使用します。-cオプションはバイト数をカウントするため、UTF-8の日本語は1文字3バイトとして計算されますが、-mオプションを使用すれば文字コードを解釈して正しく1文字としてカウントします。
Q. ディレクトリ内のファイル数や、ログ内の特定エラーの発生回数をカウントするにはどうすればよいですか?
A.
他のコマンドとパイプ(|)で連携します。例えば、ファイル数のカウントには「ls -1 | wc -l」、特定エラーのカウントには「grep 'ERROR' log.txt | wc -l」のように、出力をwc -lに渡すことで実現できます。

コメント

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