排序数字串

时间:2014-11-11 08:16:22

标签: powershell

阅读文本文件数据:

1,26586,0
1,789,1
1,5689,0
2,5895,-2568
2,5899,5689
2,548679,-11.485

然后对结果进行排序:

1,789,1
1,5689,0
1,26586,0
2,5895,-2568
2,5899,5689
2,548679,-11.485

我尝试了get-content file txt | sort-object -unique,但结果是:

1,26586,0
1,5689,0
1,789,1
2,5899,5689
2,5895,-2568
2,548679,-11.485

2 个答案:

答案 0 :(得分:0)

首先,您需要将行拆分为单独的字段,因此排序例程可以单独处理每个列。而且由于你想要用数字排序,你还需要将字符串转换为实际数字。

试试这个:

Import-Csv 'C:\path\to\your.txt' -Headers 'A','B','C' |
  select @{n='A';e={[int]$_.A}}, @{n='B';e={[int]$_.B}}, C |
  sort -Unique A, B

答案 1 :(得分:0)

Sort-Object将所有内容视为字符串。

为了达到你想要的效果,你需要明确地告诉它输入字符串的哪些部分要作为数字类型处理,或者通过对数字进行重写来将它们格式化为有意义的字符串。

零填充字符串:

$Lines = Get-Content .\file.txt
$Lines |Sort-Object -Unique { "{0:D10}{1:D10}{2:F10}" -f $([int[]]($_-split",")) }

视为个别数字:

$Lines = Get-Content .\file.txt
$Lines |Sort-Object -Unique {[int]($_-split",")[0]}, {[int]($_-split",")[1]}, {[double]($_-split",")[2]}