Use Sort-Object with a 计算属性:
# Simulate input from a file (e.g., Get-Content in.txt)
$fileLines =
@'
Smith,John,65
Walker,Luke,25
Mano,Jill,88
'@ -split '\r?\n'
$fileLines | Sort-Object -Descending { [int] ($_ -split ',')[-1] }
这是按年龄排序的only。你可以添加额外的排序标准,以便在相同年龄的人中按姓名排序。
不过,此时您最好将数据作为 CSV 数据处理,使用Import-Csv为了将文件解析为objects您可以使用(该示例使用内存中的 cmdlet 版本,ConvertFrom-Csv):
# Simulate input from a file (e.g., Import-Csv in.csv)
$csvRows = @'
Smith,John,65
Walker,Luke,25
Mano,Jill,88
'@ | ConvertFrom-Csv -Header last, first, age
# Sort by age, then by name.
$csvRows |
Sort-Object -Descending { [int] $_.age }, last, first
Note:
-
由于您的数据缺少标题(列名称),因此它是通过-Header
争论。
-
Import-Csv
/ ConvertTo-Csv
将 CSV 数据解析为[pscustomobject]
其属性根据 CSV 列命名并包含字段值的实例。
-
您可以使用Export-Csv将结果导出回 CSV 文件,总是with一个标题。
- In Windows PowerShell,你总会得到双引号字段值。
- In PowerShell(核心)7+,您可以使用以下命令控制引用行为
-UseQuotes
and QuoteField
参数。
- Use
-Encoding
根据需要控制输出文件的字符编码;值得注意的是,在 Windows PowerShell 中,默认情况下会生成 ASCII(!) 文件;在 PowerShell (Core) 7+ 中,无 BOM 的 UTF-8 是合理的默认值(与 Windows PowerShell 不同,它是跨域的默认值)allcmdlet)。