PowershellによるCSVファイルからのデータ抽出

CSV形式のデータから特定の文字列を含む行だけ取り出す必要が生じた場合、通常はExcelで読み込んでオートフィルタで抽出するのがお手軽だと思いますが、

  1. データ量がExcelで取り扱うには多い
  2. 抽出条件が複雑
  3. 作業を行うPCにExcelがない

などといった理由からPowershellを使ってデータ抽出をすることがあります。

例えば下のようなCSVデータがあったと仮定して、ここからデータ抽出を行います。

PowershellにはCSVのインポート/エクスポートを行うコマンドレットがあるので、入出力はこれでOKです。

データ抽出にあたってはインポートした内容を変数に格納し、Where-Objectコマンドレットで抽出します。これは正規表現が使えるので、複雑な抽出条件も設定できます。

下のスクリプトはCSVから駅名に”信濃”を含む行を取り出して、CSVと同じフォルダに”result.csv”として出力するものです。

#Powershell
#CSVがあるディレクトリに移動
Set-Location 'C:Users\hoge\csv'

#CSV読み込み
$csv = Import-Csv .\nagaden.csv -Encoding Default

#データを抽出("信濃"を含む駅名のみ抽出)後、CSV出力
$csv | Where-Object {$_.駅名 -match '.*信濃.*'} | Export-Csv ./result.csv -Encoding Default -NoTypeInformation

結果はこうなりました。

Powershellの地味にありがたいところはWindows10には絶対入っているということです。突然借りたPCでも基本的には使えるので、突発的にアドリブで何かしなくてはならない時に助かっています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スパム対策のため、日本語が含まれないコメントは投稿できません。