Hod*_*deh 2 powershell cmd powershell-2.0
how can I sort a text file by 3rd column in PowerShell? That is part of the file:
reza zabihi 12 1 maryam joraee 17 2 leyla ahmadi 13 2 farzin farahbakhsh 16 1 keyvan maleki 8 1 kaveh ahangar 18 1 nooshafarin bakhtiari 13 2 roya afrashteh 13 2 asghar nazemi 18 1 jaleh nooruzi 16 2 阿里萨马迪 6 1 莫森阿迪比 3 1 菲鲁兹卡里米 7 1 莫斯塔法罗斯塔米安 18 1 贾法尔奥米迪 6 1 岛 zagrosi 12 2 somayyeh modaberi 16 2 沙赫拉姆·扎马尼 16 1 赛耶拉玛蒂 3 2 shirin rahjoo 12 2
我试过
Get-Content namef | Sort-Object { [double]$_.Split()[-2] } -Descending
Run Code Online (Sandbox Code Playgroud)
你快到了。您的代码无法按您预期的方式工作的原因是该Split()
方法在每个空格处拆分字符串,因此您会得到很多空列。你真正想要的是在连续的空白处分割。要执行后者,请使用-split
运算符:
Get-Content namef | Sort-Object { [double]($_ -split '\s+')[-2] } -Descending
Run Code Online (Sandbox Code Playgroud)
这是一种可能的解决方案:
Get-Content yourfile.txt | ForEach-Object {
$Line = $_.Trim() -Split '\s+'
New-Object -TypeName PSCustomObject -Property @{
FirstName = $Line[0]
LastName = $Line[1]
FirstValue = [int]$Line[2]
SecondValue = [int]$Line[3]
}
} | Sort-Object FirstValue | Format-Table
Run Code Online (Sandbox Code Playgroud)
这用于Get-Content
加载文件,然后使用ForEach-Object
循环迭代该文件的每一行(其中该行由自动变量 表示$_
)。
它使用行上的方法删除尾随空格,然后使用表示一个或多个空格的.Trim()
RegEx 字符串分割行。\s+
现在这$Line
是一个数组,其中每个元素不包括空格,因此我们创建一个自定义 PowerShell 对象,在其中为每个项目指定一个名称,并通过$Line
数组索引运算符访问它对应的值[0]
。[1]
我们将值列转换[int]
为它们稍后将被正确排序(而不是将它们视为字符串)。
Sort-Object
现在我们已经输出了一个 PowerShell 对象,我们可以简单地使用 FirstValue 属性将结果通过管道输出,然后将其发送到Format-Table
以获取表结果。
归档时间: |
|
查看次数: |
10542 次 |
最近记录: |