PowerShell导入CSV文件并按列排序失败求助
问题分析与解决方案
你的问题出在操作顺序错误,以及没有处理百分比字符串的数值排序逻辑,具体来说:
为什么原代码排序无效?
原代码中,你先对Get-Content输出的字符串数组执行Sort-Object "Percentage Used",但这时候还没有通过ConvertFrom-Csv将字符串解析为CSV对象——也就是说,此时的"Percentage Used"并不是一个可识别的属性,Sort-Object实际上是在对原始文本行做无意义的字符串排序,自然达不到按指定列排序的效果。
另外,就算顺序对了,直接按"Percentage Used"列的字符串排序也会有问题(比如"10%"会排在"2%"前面,但数值上2%更小),因为字符串排序是按字符顺序,不是数值大小。
修正后的代码
调整操作顺序,先将文本转换为CSV对象,再针对百分比列的数值进行排序:
$csvPath = 'path/to/usage_new.csv' # 先解析为CSV对象,再按百分比数值排序 $usage = Get-Content -Path $csvPath | Select-Object -Skip 2 | ConvertFrom-Csv | Sort-Object -Property @{ Expression = { # 去掉%符号并转换为数值,确保按大小排序 [double]$_.\"Percentage Used".TrimEnd('%') } } foreach ($usage1 in $usage) { Write-Host "Number $($usage1.Phone) used $($usage1.'Percentage Used')%" }
关键改动说明
- 调整顺序:把
ConvertFrom-Csv移到Sort-Object之前,这样Sort-Object才能识别CSV对象的Percentage Used属性。 - 数值排序处理:通过
Sort-Object的计算属性,提取Percentage Used列中的数字部分(去掉%)并转换为double类型,确保排序是按数值大小而非字符串顺序进行。
如果你的百分比列数值都是整数,也可以用[int]代替[double],效果一样。
内容的提问来源于stack exchange,提问作者pelagos
相关产品推荐
相关产品推荐

