CSVファイルをDBのように扱う方法を紹介します。
CSVファイルを定期的にコマンドで解析したい場合などに有効です。
目次
PowerShellでCSVファイルを読み込む
まず、CSVファイルを用意してPowerShellで読み込みましょう。
1行目で$CSV_DATA 変数にcsvの情報をセットし、2行目でCSVのヘッダ情報を追加しています。
1 2 3 | $CSV_DATA = Get-Content -Path test.csv -Encoding String $CSV_DATA = $CSV_DATA | ConvertFrom-Csv -Header "no", "name", "sex","type","age" |
実行イメージ
読み込んだCSVファイルを表示
読み込んだファイルの表示には Select-Object コマンドを使います。先ほどCSVの情報を読み込んだ $CSV_DATA 変数を参照してみましょう。
1 | $CSV_DATA | Select-Object | Format-Table |
実行イメージ
表示する情報を制限する。
SQLなどでは where句に条件を指定することで表示するデータを制限できます。
PowerShellでは Where-Object を使うことで表示するデータを制限できます。
先ほどの結果からtypeが鬼 のデータのみを表示したい場合は以下のようになります。
1 | $CSV_DATA | Select-Object | Where-Object {$_.type -eq "鬼"} | Format-Table |
実行イメージ
気を付けないといけないのは、Select-Object
の後に Where-Object
を指定してください。
Format-Table の後に Where-Object
を指定すると結果が正しく表示されません。実際に実行してみましょう。
1 | $CSV_DATA | Select-Object | Where-Object {$_.type -eq "鬼"} | Format-Table |
実行イメージ
Where-Objectの使い方
先ほど説明した Where-Object
の {$_.type -eq "鬼"} は -eq は イコール という意味になります。プログラムやSQLと扱いが違うため注意が必要です。
マイクロソフトのページに比較演算子が纏まってますのでそちらを参考にしてください!
[blogcard url="https://docs.microsoft.com/ja-jp/powershell/scripting/samples/removing-objects-from-the-pipeline--where-object-?view=powershell-7"]
複数条件を指定する場合
抽出条件を複数指定する方法は2通りあります。
一つ目は Where-Object をパイプでつなぎ、2つ記述する方法です。
1 | $CSV_DATA | Select-Object | Where-Object {$_.type -eq "人"} | Where-Object {$_.age -eq "15"} |
二つ目は条件をカッコ () で囲み、 -and でつなぎ条件のみを2つ記述する方法です。
1 | $CSV_DATA | Select-Object | Where-Object { ($_.type -eq "人") -and ($_.age -eq "15")} |
実行イメージ(Format-Table 無し/有り)
この結果により、鬼滅の刃の たんじろう と いのすけ が同い年なのが分かりましたね。
まとめ
今回はPowerShellでできる手法の一つをざっくり纏めました。
このレベルであればエクセルで操作したほうが圧倒的に楽です。ただPowerShellはバッチ化することができます。
CSVを定期的に読み込み、一定の条件のデータが検出されたら通知を飛ばすなどいろいろなことができます。
非常にざっくりな説明ですが、業務効率などのきっかけになれば幸いです。
類似記事でSQLのコマンド一覧なども纏めてます。よろしければご活用ください。
Oracle SQLコマンド:業務効率化のための実用的な一覧と使用方法
続きを見る