ConvertFrom-Csv - CSVをパースする

前提

> notepad.exe 1.csv
ID,NAME,AGE
1,太郎,15
2,花子,13
3,次郎,9
  • PowerShell5まではUTF-8 BOM付きで保存する
  • それより新しいPowerShellならBOMなしでもよい
  • 日本語を扱わないならどちらでもいい

基本

> gc .\1.csv | ConvertFrom-Csv
ID NAME AGE
-- ---- ---
1  太郎 15
2  花子 13
3  次郎 9

デリミターを変更する

> gc .\2.csv | ConvertFrom-Csv -Delimiter "`t"
ID NAME AGE
-- ---- ---
1  太郎 15
2  花子 13
3  次郎 9
  • デリミターはデフォルトではカンマ(,)
  • デリミタ―を2文字以上にしたい場合はConvertFrom-CsvではなくConvertFrom-Stringを使う

ヘッダーを指定する

> gc .\1.csv | select -Skip 1 | ConvertFrom-Csv -Header "ID","Namae","Nenrei"
ID Namae Nenrei
-- ----- ------
1  太郎  15
2  花子  13
3  次郎  10
> gc .\1.csv | select -Skip 1 | ConvertFrom-Csv -Header (1..3)
1 2    3
- -    -
1 太郎 15
2 花子 13
3 次郎 9
  • ヘッダーを指定する場合、select -Skip 1でCSVファイルのヘッダー行を捨てる(ヘッダ-行がある場合)
  • 文字列で指定するのが面倒な場合は(1..3)のように数値リストで指定してもよい

Where-Object (?) で絞り込む

> gc .\1.csv | ConvertFrom-Csv | ? { $_.ID -eq "1" }
ID NAME AGE
-- ---- ---
1  太郎 15
> gc .\1.csv | ConvertFrom-Csv | ? { [int] $_.AGE -gt 10 }
ID NAME AGE
-- ---- ---
1  太郎 15
2  花子 13
  • 数値で比較する場合は[int]でキャストする
  • ちなみに日付カラムがあるなら、? { [datetime] $_.DATE -gt "2021/01/01" }みたいにキャストして絞り込む

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2021-03-04 (木) 13:06:12