PowerShellでキャッシュレス・消費者還元事業事務局審査を通過した加盟店一覧をCSV変換

# 抽出用
$p = "(^\d{1,3}(,\d{3})?)\s(\S{2,3}(都|道|府|県))\s+(\S{1,7}(市|区|町|村))\s+(.+)\s+(\S+)\s+(\S+)\s+([2|5]%)$"

# TSV
Get-Content kameiten_touroku_list.txt -Encoding UTF8 | Select-String -Pattern $p | ForEach-Object { $data = @(); foreach ( $i in @(1, 3, 5, 7, 8, 9, 10)) { $data += ($_.Matches.Groups[$i].value) }; $data -join "`t" } | Out-File .\output.tsv

#CSV
Get-Content kameiten_touroku_list.txt -Encoding UTF8 | Select-String -Pattern $p | ForEach-Object { $data = @(); foreach ( $i in @(1, 3, 5, 7, 8, 9, 10)) { $data += ($_.Matches.Groups[$i].value) }; $data -join "`t" } | ConvertFrom-CSV -header 'No.', '都道府県', '市区町村', '事業所名(屋号)', '業種', '区分','還元率' -Delimiter "`t" | Export-Csv .\output.csv -NoTypeInformation -Append -Encoding UTF8

説明

# list.txtをUTF8で1行ずつ取得
Get-Content kameiten_touroku_list.txt -Encoding UTF8 |

# 正規表現で検索、マッチしたら下へ
Select-String -Pattern "(^\d{1,3}(,\d{3})?)\s(\S{2,3}(都|道|府|県))\s+(\S{1,7}(市|区|町|村))\s+(.+)\s+(\S+)\s+(\S+)\s+([2|5]%)$" |

# 目的のマッチを取り出し$dataにまとめてjoinでタグ結合
ForEach-Object { $data = @(); foreach ( $i in @(1, 3, 5, 7, 8, 9, 10)) { $data += ($_.Matches.Groups[$i].value) }; $data -join "`t" } |

# ヘッダーを設定し、タグで分割してCSVオブジェクトを作成
ConvertFrom-CSV -header 'No.', '都道府県', '市区町村', '事業所名(屋号)', '業種', '区分','還元率' -Delimiter "`t" |

# CSVオブジェクトをUTF8で追記書き出し
Export-Csv .\output.csv -NoTypeInformation -Append -Encoding UTF8