テキストデータの行数を数えるのは、非常に基本的な処理操作の1つである。ファイル名を一覧にしたリストの行数を数えれば総ファイル数が分かるし、ソートや抽出/ユニーク処理後の行数を数えれば、該当するデータの数が分かる。Windows OSにはwcコマンドはないが、別のコマンドで行数を数えることはできる。その方法を紹介する。
対象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.exe」は、テキストデータから指定された文字列を検索して、それが含まれる行を表示するというWindows OSの標準コマンドである。通常は「dir | find "テスト"」のようにして、指定された文字列が含まれる行テキストを抽出するために利用する。
findコマンドにさらに「/c」というオプションを付けると、検索結果のテキストそのものではなく、その検索結果の「行数」が表示される。
上の例では「test」という文字列が含まれる行の数を数えているが、行の内容には関係なく、単にテキストの総行数さえ分かればよいということも少なくないだろう。
そのためには、「find /c /v ""」というコマンドを実行すればよい。
「""」は空文字列を表すが、「find ""」だと何にもマッチせず、結果、何も表示されないことになる。/cを付けた場合は「0」が表示される。
「/v」は「マッチしない行を表示する」というオプションであり、「find /v ""」とすれば全ての行が表示される。つまり、これにさらに/cを付けると、入力されたテキストの総行数が表示されることになるわけだ。
PowerShellの場合は、オブジェクトに「.Length」を付けると行数が表示される。また、Measure-Object(もしくは単にMeasure)のCountプロパティで行数を数えることができる(-Linesを付けると、Countのみが表示される)。
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」のようにして呼び出せばよい。
なお、wcコマンドでは、テキスト中に含まれる改行記号の数を行数としてカウントしている。そのため、テキスト中に改行記号が1つもない場合は0行とカウントされる。それに対してWindowsのfindコマンドでは、改行記号よりも後ろに文字があれば(ファイルの最後が改行記号でなくても)、それも1行と数えるという違いがある。
Copyright© Digital Advantage Corp. All Rights Reserved.