You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:17:28