PowerShellファイルの行数、単語数、文字数を取得するコマンドレット「Measure-Object」

コンピュータ

Measure-Objectコマンドレットを使うとテキストファイルの行数、単語数、文字数をカウントし取得することが出来るようです。

まず、読み込ませるテキストファイルを作成

Get-ChildItem > filelist.txt

カレントディレクトリのファイルの一覧をGet-ChildItemで取得し結果をfilelist.txtという名前のファイルに出力します。

作成したテキストファイルの文字数などを取得してみます。

Get-Content filelist.txt | Measure-Object -Line -Word -Character

Get-Contentでテキストファイルを読み込みMeasure-Objectへパイプで送り込みます。
オプションでLine,Word,Characterを指定することで行数、単語数、文字数が取得されます。

結果

Lines Words Characters Property
----- ----- ---------- --------
   17    78       1922

17行で78単語1922文字という結果になりました。行数などに違和感があります。

メモ帳などでサンプルとなるテキストファイルを作成してみます。

abcd 1234
日本語 漢字

ABC

結果

Lines Words Characters Property
----- ----- ---------- --------
    3     4         22

三行目にあたる空行がカウントされていない模様。
単語数が5に見えますが結果が4となっています。
ちなみに単語同士はスペースで区切っています。

気になる点を加工して再度実行

abcd 1234
日本語  漢字
ABC

結果

Lines Words Characters Property
----- ----- ---------- --------
    3     5         23

空行を削除し、「日本語」と「漢字」の区切り文字をスペース1つから2つに変更してみました。
行数、単語数とも思った通りの数値なりました。
あと文字数を目視でカウントしてみると19文字ですが結果は23文字です。
その差は4文字となりますが、多分改行コードがCRLFで2文字分としてカウントされそれが2行分ありますので19文字+改行4文字で23文字になっていると思われます。

PowerShell5で試していますが、文字コードや改行コードの関係で環境ごとに結果が異なるかもしれません。
とりあえず自分が使う環境でどのような動作をするか確認しておくと良さそうです。

コメント