【PowerShell】CSVファイルを読み込んで特定列を抽出する方法

Powershell Powershell
この記事は約3分で読めます。

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

この場合、NameAge の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を使わずにデータ加工を自動化できるため、定期レポートの作成やログ解析などの業務効率化に役立つかと思います。