🎻

PowerShellでCSVファイル内の値を合計する

2021/02/23に公開

はじめに

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