Watch

コマンドラインでファイルの行数を数える方法

コマンドラインでファイルの行数を数える方法

コマンドラインでファイルまたはドキュメントの行数をカウントする方法

テキストファイルやドキュメントの行数を数える必要がありますか?コマンドラインを使えば、どんなファイルの行数も簡単に数えられます。行数を数えるコマンドは、最近の Unix ベースのオペレーティングシステムではすべて同じです。つまり、この行数カウントの方法は、Mac OS、Mac OS X、Linux、BSD、さらには Bash シェルを搭載した Windows でも同じように機能します。

ここでは、コマンドラインで利用できる最も直接的な行数カウントツールであるwcを使用します。wcユーティリティは行数だけでなく、単語数や文字数も表示できます。ここではもちろん前者に焦点を当てるため、wcを使って入力として与えられた任意のテキストファイルの行数をカウントする方法を説明します。


wc は行を「改行文字で区切られた文字列」と定義します。つまり、改行文字が重複していない行のみが1行としてカウントされます。したがって、ファイルに改行文字が存在せず、ファイルが1つの巨大な文または単一のコマンド文字列のみで構成されている場合、1行として報告されます。

wc を使ってターミナルからファイルの行数を数える方法

  1. まだ開いていない場合は、ターミナルウィンドウを開きます(Mac OSでは、ターミナルアプリケーションは/アプリケーション/ユーティリティ/にあります)。
  2. コマンドプロンプトで次のコマンド構文を入力し、「filename」を行数を数えたいファイルに置き換えます。
  3. wc -l filename

  4. リターンキーを押すと、ファイル名の前にファイルの行数が表示されます。

コマンドラインでファイルまたはテキスト文書の行数をカウントする方法

ご想像のとおり、-l フラグ (小文字の L) は「行」を表します。

たとえば、デスクトップにある「exampleFileToCountLines.txt」というファイルに対して wc -l コマンドを実行すると、次のようになります。

% wc -l ~/Desktop/exampleFileToCountLines.txt
1213 /Users/Paul/Desktop/exampleFileToCountLines.txt

この例からわかるように、指定されたテキスト ファイルの行数は 1213 です。つまり、ファイルの長さは 1,213 行です。

wc コマンドは、Mac OS、Linux、FreeBSD、Bash を搭載した Windows など、最新の Unix ベースのオペレーティング システムで同じように動作します。

wc を使用してファイルの行数、単語数、文字数をカウントする

-l フラグなしで wc コマンドを実行することもできます。その場合、行数、単語数、文字数がこの順に表示されます。例:

wc /etc/hosts
9 32 214 /etc/hosts

このコマンドの出力を、wc -l フラグのみを使用した同じコマンドの出力と比較します。

wc -l /etc/hosts
9 /etc/hosts

これはテキストファイルの行数を入力としてカウントするだけで、ファイル自体を変更するものではありません。ファイルを変更したい場合は、コマンドラインから手動でテキストファイルに行番号を追加してください。

wc を使ってパイプ出力データの行数を数える方法

また、wc を使用して、cat や ls などからパイプされたデータの行数をカウントすることもできます。

cat /etc/hosts | wc -l

このシナリオでは、出力は単に「9」のようなファイル内の行数になります。

wc コマンドは非常に便利なので、wc のマニュアル ページを読むと、使用方法に関するさらに多くのアイデアやコツが得られます。

wc 行数カウントツールのコマンドライン

これは明らかにコマンド ライン向けですが、ファイルの行数と文字数を取得する他の方法もあります。

短いファイルの場合は手動で行数を数えることもできますし、BBEditのようなサードパーティ製のMacアプリはデフォルトで行番号を表示します。また、BBEditの姉妹アプリであるTextWranglerを使えば、TextWranglerでも行番号を表示できます。Mac as a Service用の単語数・文字数カウンターツールを自作することも可能です。アクセスしたいファイルの行番号が既に分かっている場合は、TextEditで特定の行番号に直接ジャンプできますが、残念ながらTextEditは行番号を表示しません。これは見落としのように思えます。