定例的なテキスト整形やデータ集計なんかは、コマンド操作でやっつけてしまいたいですよね。今回は、Powershell で CSVファイルの数値が記載された列(カラム)の合計値を取得する方法を紹介します。
テキストファイルの合計値を取得する
まずは、以下のようなテキストファイルでの処理の仕方です。
1 2 3 4 5 6 |
> Get-Content .\test1.txt 100 200 300 400 500 |
使用するコマンドレットとしては、「Measure-Object」で、以下のように使用できます。
1 2 3 4 5 6 7 8 |
> Get-Content .\test1.txt | measure -sum Count : 5 Average : Sum : 1500 Maximum : Minimum : Property : |
ここから、Sum(合計値)を取り出します。
1 2 3 |
> $i=Get-Content .\test1.txt | measure -sum > $i.Sum 1500 |
ワンライナーなら以下ですね。
1 2 |
> (Get-Content .\test1.txt | measure -sum).sum 1500 |
measureコマンドのオプション指定によって、合計・平均・最大値・最小値 も取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
> Get-Content .\test1.txt | measure -Average -Sum -Maximum -Minimum Count : 5 Average : 300 Sum : 1500 Maximum : 500 Minimum : 100 Property : > $i=Get-Content .\test1.txt | measure -Average -Sum -Maximum -Minimum > $i.Minimum 100 |
他にはこんな書き方もできます。
1 2 3 |
> Get-Content .\test1.txt | foreach { $i += [int]$_ } > $i 1500 |
この場合の注意点としては、型を指定しないと文字列として扱われてしまうので、intを指定する必要があるということです。
CSVファイルの特定の列の合計値を取得する
応用編として、CSVファイルを直接読み込んで、特定の列の数値の合計を取得します。こちらのほうが、実践的かと思います。
処理対象のデータとしては、以下のようなものです。
1 2 3 4 5 6 |
> Get-Content .\test2.csv aaa,100,zzz bbb,200,yyy ccc,300,xxx ddd,400,www eee,500,vvv |
ここから、数値の列(2列目)のみ抽出します。補足ですが、カンマ区切りで2列目を取得しています。※0スタートなので、[1] を指定
1 2 3 4 5 6 |
> Get-Content .\test2.csv | foreach { ($_ -split ",")[1] } 100 200 300 400 500 |
ここまできたら、後は、テキストの処理と同じです。
1 2 3 4 5 6 7 8 |
> Get-Content .\test2.csv | foreach { ($_ -split ",")[1] } | measure -Sum Count : 5 Average : Sum : 1500 Maximum : Minimum : Property : |
あとは変数に入れて、Sumのみ取得します。
1 2 3 |
> $i=Get-Content .\test2.csv | foreach { ($_ -split ",")[1] } | measure -Sum > $i.Sum 1500 |
まとめ
いかがでしたでしょうか。
月次でデータ集計などを行う場合などに、こんな感じでぱぱっと終わらせられると仕事もはかどりますね。
ではっ