前回に続いて文字数をカウントするコマンドです。前回はUNIX系でしたが、今回はPowerShellを使います。PowerShellと言えばWindowsがメインですが、PowerShell Core登場以降はLinuxやmacOSでも動作します。と言っても完全に同じように動作するわけではありません。今回のような文字数をカウントするといった簡単なものであればWindows PowerShellでもPowerShell Coreでも同じように動作します。今回はPowerShell Coreをベースとして説明していきます。
macOS/LinuxでPowerShellをインストールしてみたいという人は以下のマイクロソフトの公式ページを参照してみてください。
https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell?view=powershell-7.2
今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)。
また、カレントディレクトリも上記の場所になります。cd ~/Desktop/sampleのようにコマンドを入力してカレントディレクトリを変更しておけばよいでしょう。
PowerShellで行数カウント
今度はPowerShellで行数をカウントしてみましょう。PowerShellの場合はいくつか方法があります。まず、ファイル(オブジェクト)に対してLengthプロパティを使う方法です。
カレントディレクトリにある1.txtの行数を表示するには以下のように指定します。
(Get-Content 1.txt).Length
ちなみにGet-Contentはエイリアスとしてcatが設定されているので以下のようにしても同じ結果になります。
(cat 1.txt).Length
PowerShellにはLengthプロパティ以外にCountプロパティもあります。以下のようにしても行数が出力されます。空白行もカウントされます。後述するMeasure-Objectの場合、空白行をカウントしないのでLength,Countを使った場合と結果が異なる場合がある点には注意が必要です。
(Get-Content 1.txt). Count
Measure-Objectの説明は次に行うとして実際の実行結果を確認してみましょう。なお、比較するテキストファイルの内容は以下のようになっています。
実際にMeasure-Objectを使った行数カウントは以下のようになります。Measure-Objectでは複数の空行はまとめられて1行としてカウントされているのがわかります。
Get-Content ./1.txt | Measure-Object -Line
Get-Content ./1n.txt | Measure-Object -Line
より詳細に文字数などを調べる
Length、Countでは行数しか求めることができません。文字数・単語数なども求めたい場合にはMeasure-Objectを使います(すでに使ってしまいましたが)。これがUNIX系でのwcに該当するようなものだと思ってよいでしょう。
PowerShellでは、Measure-Objectを使うことでUNIX系のwcと似たような結果を求める事ができます。
まず、先ほどと同様に指定したファイルの行数を求めてみます。この場合、Measure-Objectのオプションに-Lineを指定します。
以下のようにすると1.txtファイルの行数が表示されます。
Get-Content ./1.txt | Measure-Object -Line
文字数を求めたい場合はオプションに-Characterを指定します。
Get-Content ./1.txt | Measure-Object -Character
単語の数であれば-Wordを指定します。
Get-Content ./1.txt | Measure-Object -Word