PowerShellを使うと、CSVファイルのデータを簡単に読み込み、特定の列だけを抽出することができます。
Excelを利用しなくてもコマンド1つでデータを扱えるため、業務自動化やログ解析などに非常に便利です。
この記事では、Import-Csv
コマンドレットを使って特定列を抽出する方法を紹介します。
1.CSVファイルを読み込む
まずは、CSVファイルを読み込みます。
PowerShellでは Import-Csv
コマンドレットを使用します。
$csv = Import-Csv "C:\hogehoge\sample.csv"
このコマンドで、sample.csv
の内容が $csv
という変数に格納されます。
各行はオブジェクトとして扱われ、列名はプロパティとして参照できます。
2.データの抽出
今回は3パターンの抽出方法を紹介します。
2-1.特定列を抽出する
次に、特定の列だけを抽出して表示してみます。
例えば、Name
列だけを表示したい場合は次のようにします。
$csv | Select-Object Name
Select-Object
を使うことで、指定した列(プロパティ)だけを取り出すことができます。
2-2.複数列を抽出する
複数の列を抽出したい場合は、カンマ区切りで列名を指定します。
$csv | Select-Object Name, Age
この場合、Name
と Age
の2つの列を抽出して表示できます。
2-3.条件を付けて抽出する
特定の条件を満たすデータだけを取り出すことも可能です。
例えば、「Age が 30 以上のデータだけを抽出」したい場合は、次のようにします。
$csv | Where-Object { $_.Age -ge 30 } | Select-Object Name, Age
Where-Object
を使うことで、条件を満たす行だけをフィルタリングできます。
3.抽出した結果を別のCSVに保存する
抽出した結果を新しいCSVファイルとして出力したい場合は、Export-Csv
を使用します。
$csv | Select-Object Name, Age | Export-Csv "C:\hogehoge\filtered.csv" -NoTypeInformation
-NoTypeInformation
を付けることで、出力ファイルに不要な型情報が含まれなくなります。
4.一連の処理をまとめたスクリプト例
以下は、「30歳以上のユーザーを抽出して別CSVに保存する」一連の処理をまとめたスクリプト例です。
# CSVファイルを読み込み
$csv = Import-Csv "C:\hogehoge\sample.csv"
# 条件に合うデータを抽出し、指定列だけ出力
$filtered = $csv | Where-Object { $_.Age -ge 30 } | Select-Object Name, Age
# 結果を別CSVに保存
$filtered | Export-Csv "C:\data\filtered.csv" -NoTypeInformation
このスクリプトを .ps1
ファイルとして保存すれば、定期的なデータ抽出にも利用可能です。
5.まとめ
PowerShellでは、次の3つのコマンドレットを組み合わせることで、CSVファイルから必要なデータを効率よく抽出できます。
- Import-Csv:CSVファイルの読み込み
- Select-Object:必要な列を選択
- Export-Csv:結果をファイルに出力
Excelを使わずにデータ加工を自動化できるため、定期レポートの作成やログ解析などの業務効率化に役立つかと思います。