CSV形式のデータから特定の文字列を含む行だけ取り出す必要が生じた場合、通常はExcelで読み込んでオートフィルタで抽出するのがお手軽だと思いますが、
- データ量がExcelで取り扱うには多い
- 抽出条件が複雑
- 作業を行う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でも基本的には使えるので、突発的にアドリブで何かしなくてはならない時に助かっています。