n番目のフィールドでソート
2024-11-24
はじめに
ヘッダ行のないcsvファイルをn番目のフィールドでソートするPowerShellのコマンドについて.
結論
-split
演算子で行を分割し,ソートするフィールドの順番を指定する.一番左のフィールドが0番目なので,例えば2番目なら[1]
となる.
PS> Get-Content sam.csv|Sort-Object -Property {($_ -split ',')[1]}
3番目のフィールドを整数として降順で並べたいなら.
PS> Get-Content sam.csv|Sort-Object -Property {[int]($_ -split ',')[2]} -Descending
.NETのString.Split()メソッドを使用することも可.
PS> Get-Content sam.csv|Sort-Object -Property {$_.split(',')[1]}
PS> Get-Content sam.csv|Sort-Object -Property {[int]$_.split(',')[2]} -Descending
やりたいこと
以下のcsvファイルの2番目のフィールドの昇順に並べたい.
sam.csv
001,Baltimore,100
002,Detroit,110
003,Chicago,120
004,Atlanta,90
PowerShellのコマンドはこう.
- カレント行
$_
を-split
演算子で分割 - 区切文字はカンマ(
,
) - 一番左のフィールドが0番目なので,2番目のフィールドなら
[1]
PS> Get-Content sam.csv|Sort-Object -Property {($_ -split ',')[1]}
004,Atlanta,90
001,Baltimore,100
003,Chicago,120
002,Detroit,110
ちなみに,UNIXのsortコマンドならこう.
$ sort -k2,2 -t, sam.csv
004,Atlanta,90
001,Baltimore,100
003,Chicago,120
002,Detroit,110
3番目のフィールドを数値として降順に並べる.
PS> Get-Content sam.csv|Sort-Object -Property {[INT]($_ -split ',')[2]} -Descending
003,Chicago,120
002,Detroit,110
001,Baltimore,100
004,Atlanta,90
ちなみに,UNIXのsortコマンドならこう.
$ sort -k3,3 -t, -nr sam.csv
003,Chicago,120
002,Detroit,110
001,Baltimore,100
004,Atlanta,90
環境
- Windows 10 Pro
- PowerShell 5.1