【Linux】ファイルの行数をカウントする方法を徹底解説!

【Linux】ファイルの行数をカウントする方法を徹底解説!

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:5,405

Linuxでファイルの行数をカウントする方法を初心者向けに徹底解説。wc -lコマンドの基本から、grep -cで条件付きカウント、awkやsedの応用テクニック、複数ファイルの一括集計まで、実務で即使える具体例を豊富に紹介します。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

「このファイル、何行あるんだろう?」「ログファイルのエラー行だけ数えたい…」——LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルで作業をしていると、ファイルの行数を知りたい場面は頻繁に訪れます。

Linuxでファイルの行数をカウントする最も基本的な方法は wc -l コマンド です。しかし、用途によっては grep -cawksed を使い分けることで、より柔軟に行数を取得できます。

本記事では、Linux 行数 カウント の方法を、基本から応用まで体系的に解説します。この記事を読めば、どんな場面でも最適なコマンドを選んで、素早く行数を把握できるようになるでしょう。

記事のポイント

  • wc -l はファイルの行数をカウントする最も基本的かつ高速なコマンドです。
  • grep -c を使えば、特定の文字列を含む行だけをカウントできます。
  • awksed を使うと、空行の除外や複雑な条件付きカウントが可能です。
  • findwc を組み合わせれば、複数ファイルやディレクトリ全体の行数を一括集計できます。
  • パイプ(|)を活用することで、コマンドの出力結果の件数も簡単に数えられます。

wc -l:Linuxで行数をカウントする基本コマンド

Linuxでファイルの行数をカウントする際、最初に覚えるべきコマンドが wc(Word Count) です。名前の通り「単語を数える」コマンドですが、-l オプションを付けることで、行数のカウントに特化した使い方ができます。

wc コマンドの基本的な使い方

wc コマンドは、ファイルの行数・単語数・バイト数を表示するLinuxの標準コマンドです。

wcコマンドの基本(オプションなし)
$ wc sample.txt
44 120 980 sample.txt
# ↑ ↑ ↑
# 行数 単語数 バイト数

オプションを指定しない場合は、「行数」「単語数」「バイト数」の3つが一度に表示されます。行数だけを知りたい場合は、次に説明する -l オプションを使います。

wc -l で行数だけを表示する

行数のみを取得する最もシンプルな方法です。

行数だけを表示
$ wc -l sample.txt
44 sample.txt

この出力は「sample.txt は44行」であることを示しています。-lline(行) の頭文字で、改行文字(\n)の数をカウントしています。

注意: wc -l は厳密には「改行文字の数」をカウントしています。そのため、ファイル末尾に改行がない場合、最後の1行がカウントされないことがあります。この点については後述の「よくある疑問」で詳しく解説します。

wc コマンドの主要オプション一覧

wc コマンドには、行数以外にもさまざまな情報を取得するオプションがあります。

オプション機能使用例
-l行数を表示wc -l file.txt
-w単語数を表示wc -w file.txt
-cバイト数を表示wc -c file.txt
-m文字数を表示wc -m file.txt
-L最長行の文字数を表示wc -L file.txt

-c と -m の違い

-c(バイト数)と -m(文字数)は、ASCII文字のみのファイルでは同じ値になりますが、日本語などのマルチバイト文字を含む場合は異なる値になります。

注意: wc -m でマルチバイト文字を正しくカウントするには、環境のロケール設定(LANG環境変数)が ja_JP.UTF-8C.UTF-8 などの対応ロケールになっている必要があります。LANG=CPOSIX ロケールなどの場合、-m-c と同じく単なる「バイト数」としてカウントされてしまうため注意してください。

-c と -m の違い(日本語ファイル)
$ echo "こんにちは" > japanese.txt
$ wc -c japanese.txt
16 japanese.txt # バイト数(UTF-8で1文字3バイト × 5 + 改行1バイト = 16)
$ wc -m japanese.txt
6 japanese.txt # 文字数(5文字 + 改行1つ = 6)

複数ファイルの行数を一度に確認する

wc -l にスペース区切りで複数のファイルを指定すると、各ファイルの行数と合計が表示されます。

複数ファイルの行数を表示
$ wc -l file1.txt file2.txt file3.txt
10 file1.txt
25 file2.txt
30 file3.txt
65 total

ワイルドカードを使えば、特定のパターンに一致するファイルをまとめてカウントすることもできます。

ワイルドカードで一括カウント
# カレントディレクトリの.txtファイルすべての行数を表示
$ wc -l *.txt
# .logファイルすべての行数を表示
$ wc -l *.log

パイプと wc -l:コマンド出力の件数をカウントする

wc -l の真価は、他のコマンドと パイプ(| で組み合わせたときに発揮されます。パイプを使うことで、コマンドの出力結果が「何行あるか(=何件あるか)」を簡単に数えることができます。

パイプの基本と wc -l の組み合わせ

パイプ(|)は、左側のコマンドの出力を右側のコマンドの入力に渡す仕組みです。

パイプの基本構造
コマンドA | コマンドB
# コマンドAの出力 → コマンドBの入力

これを wc -l と組み合わせると、さまざまな場面で件数カウントが可能になります。

実用例:よく使うパイプ + wc -l パターン

ファイル・ディレクトリ数を数える

ls | wc -l でファイル数をカウント
# カレントディレクトリのファイル・ディレクトリ数
$ ls | wc -l
12
# 隠しファイルを含めた数
$ ls -a | wc -l
15
# ファイルのみ(ディレクトリを除く)
$ ls -l | grep "^-" | wc -l
8

実行中のプロセス数を数える

プロセス数のカウント
# 特定のプロセスが何個動いているかを確認
$ ps aux | grep "nginx" | grep -v grep | wc -l
4
# 全プロセス数を確認(結果からヘッダーの1行を引く必要があります)
$ ps aux | wc -l
128

補足: ps aux の出力には先頭に USER PID %CPU... というヘッダー行が含まれるため、単純に wc -l でカウントすると実際のプロセス数より「1」多くなります。正確なプロセス数を知りたい場合は、結果から1を引いてください(以降の ss コマンド等も同様です)。また、grep -v grep を挟むことで、grep コマンド自身のプロセスがカウントに含まれるのを防いでいます。

特定の条件でフィルタリングしたログの件数

ログファイルの件数カウント
# エラーログの件数を数える
$ cat /var/log/syslog | grep "error" | wc -l
23
# 今日の日付のログ行数
$ grep "$(date '+%b %d')" /var/log/syslog | wc -l
156

ネットワーク接続数を数える

接続数のカウント
# 現在のTCP接続数(結果からヘッダーの1行を引く必要があります)
$ ss -t | wc -l
15
# ESTABLISHED状態の接続数(結果からヘッダーの1行を引く必要があります)
$ ss -t state established | wc -l
8

cat file | wc -l と wc -l file の違い

行数をカウントする際、以下の2つの書き方がよく使われますが、微妙な違いがあります。

2つの書き方の違い
# 方法1: ファイルを直接指定
$ wc -l sample.txt
44 sample.txt
# 方法2: catでパイプに渡す
$ cat sample.txt | wc -l
44
方法出力形式特徴
wc -l file44 sample.txtファイル名も表示される
cat file | wc -l44数値だけが表示される

数値だけを取得したい場合(例:スクリプト内で変数に代入する場合)は、パイプを使う cat file | wc -l のほうが便利です。ただし、不要な cat の使用は「Useless Use of Cat」と呼ばれ、以下のように入力リダイレクトで代替できます。

入力リダイレクトで数値のみ取得
$ wc -l < sample.txt
44

grep -c:条件に一致する行数をカウントする

特定のキーワードやパターンを含む行だけをカウントしたい場合は、grep -c が最適です。grep は「パターン検索」のコマンドで、-c オプション(count)を付けると、マッチした行数を返します。

grep -c の基本的な使い方

grep -c の基本
# "error" を含む行数をカウント
$ grep -c "error" /var/log/syslog
23
# "TODO" を含む行数をカウント(ソースコード内)
$ grep -c "TODO" main.py
5

wc -l が「全行数」をカウントするのに対し、grep -c は「条件に合致する行数」をカウントするという点が大きな違いです。

大文字・小文字を区別しないカウント(-i オプション)

大文字小文字を無視してカウント
# "Error", "ERROR", "error" すべてをカウント
$ grep -ci "error" /var/log/syslog
31

-c-iignore case)を組み合わせることで、大文字・小文字の違いを無視してカウントできます。

条件に一致しない行数をカウント(-v オプション)

条件に合わない行をカウント
# 空行を除いた行数をカウント
$ grep -vc "^$" sample.txt
38
# コメント行を除いた行数をカウント(#で始まる行を除外)
$ grep -vc "^#" config.conf
12

-vinvert match)は検索パターンに一致しない行を対象にします。これを -c と組み合わせると、「特定のパターン以外の行数」が得られます。

複数ファイルに対する grep -c

複数ファイルでの grep -c
# 複数ファイルで "error" を含む行数を確認
$ grep -c "error" *.log
access.log:0
error.log:23
app.log:7

複数ファイルを対象にした場合、ファイル名と一致行数がコロン区切りで表示されます。

grep -c と grep | wc -l の違い

一見同じ結果に見えますが、微妙な違いがあります。

grep -c と grep | wc -l の比較
# grep -c:マッチした行数を表示
$ grep -c "pattern" file.txt
3
# grep | wc -l:grepの出力行数をwcでカウント
$ grep "pattern" file.txt | wc -l
3

通常は同じ結果になりますが、grep -c のほうが効率的です。パイプを使う方法は余分なプロセスが発生するためです。ただし、パイプを使う方法は grep の出力をさらに加工してからカウントしたい場合に便利です。

awk・sed:高度な条件で行数をカウントする

wcgrep では対応しきれない、より複雑な条件で行数をカウントしたい場合は、awksed を使います。

awk で行数をカウントする

awk はテキスト処理に特化した強力なコマンドです。組み込み変数 NR(Number of Records)を使うことで、行数を取得できます。

全行数をカウントする

awkで全行数をカウント
$ awk 'END {print NR}' sample.txt
44

END ブロックは、すべての行を処理した後に実行されます。このとき NR にはファイルの最終行番号(=総行数)が入っています。

空行を除外してカウントする

空行を除外してカウント
# 方法1: フィールド数(単語数)が0より大きい行をカウント
$ awk 'NF > 0 {count++} END {print count}' sample.txt
38
# 方法2: 正規表現で空行以外をマッチ
$ awk '/[^ \t]/ {count++} END {print count}' sample.txt
38

NF(Number of Fields)はその行のフィールド数(単語数)を表します。空行は NF が 0 になるため、NF > 0 で空行を除外できます。

特定の条件に合致する行をカウントする

条件付きカウント(awk)
# 3列目が100以上の行をカウント(CSVデータなど)
$ awk -F',' '$3 >= 100 {count++} END {print count}' data.csv
15
# 特定の文字列を含み、かつ数値条件も満たす行
$ awk '/error/ && $5 > 500 {count++} END {print count}' access.log
3

awk は条件式を組み合わせられるため、単純な文字列マッチだけでは実現できない複雑なフィルタリングとカウントが可能です。

sed で行数をカウントする

sed(Stream Editor)はテキストの変換・編集を行うコマンドですが、行数のカウントにも使えます。

全行数をカウントする

sedで全行数をカウント
$ sed -n '$=' sample.txt
44

$= は「最終行の行番号を表示する」という意味です。-n オプションで通常の出力を抑制し、行番号のみを表示します。

空行を削除してカウントする

空行を除外してカウント(sed + wc)
$ sed '/^$/d' sample.txt | wc -l
38

/^$/d は「空行を削除する」というsedの命令です。削除後の結果を wc -l に渡すことで、空行を除いた行数が得られます。

コメント行と空行を同時に除外する

コメント行と空行を除外
# #で始まるコメント行と空行を除外してカウント
$ sed -e '/^#/d' -e '/^$/d' config.conf | wc -l
25
# 空白のみの行も除外する場合
$ sed -e '/^#/d' -e '/^[[:space:]]*$/d' config.conf | wc -l
25

-e オプションで複数の編集コマンドを指定できます。設定ファイルの実質的な設定行数を数えたい場合に便利です。

wc・grep・awk・sed の使い分け早見表

目的推奨コマンドコマンド例
ファイルの全行数を知りたいwc -lwc -l file.txt
特定の文字列を含む行数grep -cgrep -c "error" file.txt
空行を除外した行数grep -vcgrep -vc "^$" file.txt
複雑な条件でカウントawkawk 'NF>0 {n++} END{print n}' file.txt
コメント・空行を除外sed + wcsed '/^#/d;/^$/d' file.txt | wc -l
コマンド出力の件数パイプ + wc -lls | wc -l

複数ファイル・ディレクトリの行数を一括カウントする

プロジェクト全体のコード行数を調べたい場合や、特定の拡張子のファイルだけを対象に行数を数えたい場合は、find コマンドと wc を組み合わせます。

find + wc -l でディレクトリ内のファイルを一括カウント

find + wc -l の基本
# カレントディレクトリ以下の全 .py ファイルの行数を表示
$ find . -name "*.py" -type f -exec wc -l {} +
50 ./src/main.py
120 ./src/utils.py
30 ./tests/test_main.py
200 total

find コマンドの各オプションの意味は以下の通りです。

オプション意味
.検索開始ディレクトリ(カレントディレクトリ)
-name "*.py"ファイル名のパターン
-type fファイルのみ(ディレクトリを除外)
-exec wc -l {} +見つかったファイルに wc -l を実行

特定の拡張子を複数指定してカウントする

複数の拡張子を対象にカウント
# .py と .js ファイルの行数を集計
$ find . -type f \( -name "*.py" -o -name "*.js" \) -exec wc -l {} +
# .java ファイルの合計行数のみ表示
$ find . -name "*.java" -type f -exec cat {} + | wc -l
1250

-oOR条件 を意味し、複数の拡張子を対象にできます。

特定のディレクトリを除外してカウントする

ディレクトリの除外
# node_modules と .git を除外してカウント
$ find . -type f -name "*.js" \
-not -path "*/node_modules/*" \
-not -path "*/.git/*" \
-exec wc -l {} +
# vendor ディレクトリを除外して PHP ファイルをカウント
$ find . -type f -name "*.php" \
-not -path "*/vendor/*" \
-exec wc -l {} +

大規模なプロジェクトでは、依存ライブラリやバージョン管理ディレクトリを除外することで、自分たちが書いたコードの行数を正確に把握できます。

xargs を使った効率的なカウント

ファイル数が非常に多い場合、xargs を使うとより効率的に処理できます。

xargs を使ったカウント
# 大量のファイルを効率的にカウント
$ find . -name "*.txt" -type f | xargs wc -l
# ファイル名にスペースが含まれる場合の安全な方法
$ find . -name "*.txt" -type f -print0 | xargs -0 wc -l

-print0-0 の組み合わせは、ファイル名にスペースや特殊文字が含まれていても正しく処理するためのテクニックです。

よくある疑問とトラブルシューティング

Linuxで行数をカウントする際に、初心者がつまずきやすいポイントや、知っておくと便利な知識をまとめます。

wc -l で行数が1つ少なくカウントされる問題

wc -l は改行文字(\n)の数をカウントしています。そのため、ファイルの最終行に改行がない場合、その行はカウントされません。

末尾改行なしの場合
# 末尾に改行がないファイル
$ printf "line1\nline2\nline3" > no_newline.txt
# wc -l では2行と表示される(改行が2つしかない)
$ wc -l no_newline.txt
2 no_newline.txt
# awk なら正確に3行とカウントできる
$ awk 'END {print NR}' no_newline.txt
3

正確な行数が必要な場合は、awk 'END {print NR}' の使用をおすすめします。

空行を含めたくない場合のカウント方法

設定ファイルやソースコードの「実質的な行数」を知りたい場合、空行を除外してカウントする方法です。除外したい「空行」の定義によって、適したコマンドが変わります。

空行を除外する方法(3パターン)
# 方法1: grep -v で「完全に空(0文字)の行」を除外
$ grep -vc "^$" file.txt
# 方法2: grep で「何らかの文字がある行」だけカウント(これも完全な空行のみ除外)
$ grep -c "." file.txt
# 方法3: awk で「空白やタブだけの行」も含めて除外
$ awk 'NF' file.txt | wc -l

補足: 方法1と方法2は、スペースやタブといった空白文字だけが入っている行を「文字がある」とみなしてカウントに含めます。一方、方法3の awk 'NF' は、空白文字だけで構成された行をフィールド数0と判定するため、完全に空の行だけでなく、見えない「空白行」も除外してカウントできます。

巨大ファイルの行数を高速にカウントしたい場合

数GBを超える巨大なログファイルの行数をカウントする場合、処理速度が重要になります。

巨大ファイルのカウント
# wc -l は最も高速(Cで実装されているため)
$ wc -l huge_file.log
# 処理時間を計測する場合
$ time wc -l huge_file.log

wc -l はC言語で実装されており、内部的に最適化されているため、行数カウントにおいて最も高速です。awksed は柔軟性が高い分、wc よりは処理が遅くなる傾向があります。

標準入力から行数をカウントする場合

ファイルではなく、コマンドの出力や対話的な入力から行数を数えたい場合の方法です。

標準入力からのカウント
# ヒアドキュメントから行数をカウント
$ wc -l <<EOF
line1
line2
line3
EOF
3
# 変数に格納された文字列の行数
$ text="line1
line2
line3"
$ echo "$text" | wc -l
3

まとめ:Linuxでの行数カウントをマスターしよう

本記事では、Linuxでファイルの行数をカウントするさまざまな方法を解説しました。最後に、各コマンドの特徴と使い分けを整理します。

コマンド別の特徴まとめ

コマンド速度柔軟性主な用途
wc -l★★★★☆☆ファイル全体の行数カウント
grep -c★★★★★☆条件に一致する行数のカウント
awk★★☆★★★複雑な条件付きカウント
sed★★☆★★☆テキスト変換と組み合わせたカウント
find + wc★★☆★★★複数ファイル・ディレクトリの一括カウント

目的別クイックリファレンス

迷ったときは、以下を参考にしてください。

  • 「ファイルが何行あるか知りたい」wc -l file.txt
  • 「エラーが何件あるか数えたい」grep -c "error" file.txt
  • 「空行を除いた行数が知りたい」grep -vc "^$" file.txt
  • 「プロジェクト全体のコード行数を把握したい」find . -name "*.py" -exec wc -l {} +
  • 「コマンドの結果が何件あるか知りたい」command | wc -l

Linuxでの行数カウントは、wc -l という一つのコマンドから始まりますが、grepawksedfind と組み合わせることで、あらゆる場面に対応できるようになります。ぜひ日々の作業で積極的に活用し、Linuxスキルを向上させていきましょう。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top