連載
» 2018年09月20日 05時00分 公開

Tech TIPS:Windows OSでテキストの行数を数える(wc -lコマンドを実現する)

テキストデータの行数を数えるのは、非常に基本的な処理操作の1つである。ファイル名を一覧にしたリストの行数を数えれば総ファイル数が分かるし、ソートや抽出/ユニーク処理後の行数を数えれば、該当するデータの数が分かる。Windows OSにはwcコマンドはないが、別のコマンドで行数を数えることはできる。その方法を紹介する。

[打越浩幸,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 7/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


 Windows OSのコマンドプロンプト上でテキストデータの処理を行う場合、テキストの行数を数えると、簡単に解決することがある。例えばデータを1行ずつまとめたCSVファイルなどでは、行数を数えるとデータの総数が分かる。

 またdirなどの結果の行数を数えると(TIPS「Windowsのdirコマンドでファイル名の一覧を取得する」参照)、該当するファイルやフォルダの総数を調べることができる。

 テキストファイルの行数を数えたい場合、UNIXやLinuxでは「wc(word count)」というコマンドを使う。wcに-lオプションを付けて「wc -l」とするとテキストの行数が表示される(行数以外にも、語数やバイト数もカウントできる)。

 Windows OSには、デフォルトではこのwcコマンドは用意されていないが、類似の機能を実現することは可能である。本TIPSでは、この方法を紹介する。

findコマンドでファイルのテキストの行数を数える

 コマンドプロンプト上で実行できるコマンド「find.exe」は、テキストデータから指定された文字列を検索して、それが含まれる行を表示するというWindows OSの標準コマンドである。通常は「dir | find "テスト"」のようにして、指定された文字列が含まれる行テキストを抽出するために利用する。

 findコマンドにさらに「/c」というオプションを付けると、検索結果のテキストそのものではなく、その検索結果の「行数」が表示される。

findコマンドで行数を数える findコマンドで行数を数える
findコマンドに/cオプションを付けると、文字列にマッチした行のテキストそのものではなく、マッチした行の数が表示される。これで行数をカウントできる。

 上の例では「test」という文字列が含まれる行の数を数えているが、行の内容には関係なく、単にテキストの総行数さえ分かればよいということも少なくないだろう。

 そのためには、「find /c /v ""」というコマンドを実行すればよい。

 「""」は空文字列を表すが、「find ""」だと何にもマッチせず、結果、何も表示されないことになる。/cを付けた場合は「0」が表示される。

 「/v」は「マッチしない行を表示する」というオプションであり、「find /v ""」とすれば全ての行が表示される。つまり、これにさらに/cを付けると、入力されたテキストの総行数が表示されることになるわけだ。

findで全テキストにマッチさせ、行数を数えてみる findで全テキストにマッチさせ、行数を数えてみる
「find /v ""」とすると、全ての行に一致する(全ての行がそのまま表示される)。この行数を数えると、入力されたテキストの総行数になる。

PowerShellの.LengthやMeasure-Objectでテキストの行数を数える

 PowerShellの場合は、オブジェクトに「.Length」を付けると行数が表示される。また、Measure-Object(もしくは単にMeasure)のCountプロパティで行数を数えることができる(-Linesを付けると、Countのみが表示される)。

PowerShellでテキストの行数を数える PowerShellでテキストの行数を数える
PowerShellの場合は、Measure-Object(Measure)で行数などが分かるし、単に .Length プロパティでも行数を取得できる。

WSLのwcコマンドを呼び出す

 LinuxやUNIXのwcコマンドを使いたいなら、Linuxで提供されているtouchコマンドをWindows OS上で呼び出せばよい。Windows OS向けに移植されたwcコマンドも多数あるが、Windows 10ならWSL(Windows Subsystem for Linux)上のwcコマンドを呼び出すとよいだろう。

 上記のTIPSを参考にWSLをWindows 10上で利用できるようにしてからbash上で実行するか、コマンドプロンプト上で先頭に「wsl」を付けて「wsl wc」のようにして呼び出せばよい。

WSLのwcを呼び出す WSLのwcを呼び出す
行数を数えるツールといえば、まずwc。wslをインストールしているなら、wcをそのまま呼び出して使えばよい。

 なお、wcコマンドでは、テキスト中に含まれる改行記号の数を行数としてカウントしている。そのため、テキスト中に改行記号が1つもない場合は0行とカウントされる。それに対してWindowsのfindコマンドでは、改行記号よりも後ろに文字があれば(ファイルの最後が改行記号でなくても)、それも1行と数えるという違いがある。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。