🎻
PowerShellでCSVファイル内の値を合計する
はじめに
PowerShellでCSVファイルを操作したいことがありましたので、
そのとき覚えたことを記載します。
やりたかったこと
以下のようなCSVファイルがあり(ここではファイル名は適当にsample.csv
とします)、
data1,data2,data3
1,2,3
4,5,6
7,8,9
これを列ごとの合計を出力したい。
結果は以下のようにしたい。
12 15 18
Import-Csv
Import-Csvを使用すると、以下のように出力されます。
> Import-Csv .\sample.csv
data1 data2 data3
----- ----- -----
1 2 3
4 5 6
7 8 9
ForEach-Object
これをForEach-Object (エイリアスは %
)にパイプで渡します。
以下では、ForEach-Objectに渡したものをそのまま出力しています。
> Import-Csv .\sample.csv | % {$_}
data1 data2 data3
----- ----- -----
1 2 3
4 5 6
7 8 9
Begin 合計値を保持する変数の初期化
変数 $SUM1
SUM2
SUM3
を-Begin
内で0で初期化します。
> Import-Csv .\sample.csv | % -Begin {$SUM1=0;$SUM2=0;$SUM3=0} {$_}
data1 data2 data3
----- ----- -----
1 2 3
4 5 6
7 8 9
値の加算
メインの処理で値を加算します。
> Import-Csv .\sample.csv | % -Begin {$SUM1=0;$SUM2=0;$SUM3=0} { $SUM1+=$_.data1; $SUM2+=$_.data2; $SUM3+=$_.data3}
ちょっと一行で見にくいですが、やっていることは
以下のように、各変数に値を加算しているだけです。
$SUM1+=$_.data1;
$SUM2+=$_.data2;
$SUM3+=$_.data3
結果の出力
最後にWrite-Output で結果を出力します。
> Import-Csv .\sample.csv | % -Begin {$SUM1=0;$SUM2=0;$SUM3=0} { $SUM1+=$_.data1; $SUM2+=$_.data2; $SUM3+=$_.data3} -End {Write-Output "$SUM1 $SUM2 $SUM3"}
12 15 18
出力は加算処理後の最後に行えばよいので-End
を付けます。
まとめ
Import-Csv で、CSVファイルを簡単に操作出来ます。
Discussion