在 powershell 中对文本进行数字排序
Sort text numerically in powershell
我需要对文本字符串中的一些数据进行排序。这是一个片段:
0 X6300H_INJ.xtf CSFFILE0032
1 X6301H_INJ.xtf CSFFILE0033
10 X6309H_INJ.xtf CSFFILE0041
11 X6310H_INJ.xtf CSFFILE0042
2 X6311H_INJ.xtf CSFFILE0043
我需要按第一列的数字对这些数据进行排序。我该怎么做?
以 TheMadTechnician 的有用评论为基础:
传一个script block ({... }
) to the Sort-Object
cmdlet's (positionally implied)
-Property
parameter, which allows you to determine the sort criterion dynamically for each input line (object), accessible via the automatic $_
variable.
在脚本块中,您可以使用 -split
operator 的一元形式将每一行按空格拆分为字段,提取第一个字段,并将其转换为整数([int]
),然后用作排序值。
顺便说一句:如果所有输入字符串都代表一个整体的数字,那么解决方案将很简单:
'1', '10', '9' | Sort-Object { [int] $_ } # -> '1', '9', '10'
类似地,如果要排序的数字(字符串)存储在输入对象的 属性 中(注意只是 Sort-Object Prop
会 词法排序 ):
@{ Prop='1' }, @{ Prop='10' }, @{ Prop= '9' } |
Sort-Object { [int] $_.Prop }
@'
0 X6300H_INJ.xtf CSFFILE0032
1 X6301H_INJ.xtf CSFFILE0033
10 X6309H_INJ.xtf CSFFILE0041
11 X6310H_INJ.xtf CSFFILE0042
2 X6311H_INJ.xtf CSFFILE0043
'@ -split '\r?\n' |
Sort-Object { [int] (-split $_)[0] }
注意:@'<newline>...<newline>'@
是一个(逐字)PowerShell here-string; -split '\r?\n'
将多行字符串拆分为行数组。
输出(按第一列数字正确排序):
0 X6300H_INJ.xtf CSFFILE0032
1 X6301H_INJ.xtf CSFFILE0033
2 X6311H_INJ.xtf CSFFILE0043
10 X6309H_INJ.xtf CSFFILE0041
11 X6310H_INJ.xtf CSFFILE0042
我需要对文本字符串中的一些数据进行排序。这是一个片段:
0 X6300H_INJ.xtf CSFFILE0032
1 X6301H_INJ.xtf CSFFILE0033
10 X6309H_INJ.xtf CSFFILE0041
11 X6310H_INJ.xtf CSFFILE0042
2 X6311H_INJ.xtf CSFFILE0043
我需要按第一列的数字对这些数据进行排序。我该怎么做?
以 TheMadTechnician 的有用评论为基础:
传一个script block (
{... }
) to theSort-Object
cmdlet's (positionally implied)-Property
parameter, which allows you to determine the sort criterion dynamically for each input line (object), accessible via the automatic$_
variable.在脚本块中,您可以使用
-split
operator 的一元形式将每一行按空格拆分为字段,提取第一个字段,并将其转换为整数([int]
),然后用作排序值。顺便说一句:如果所有输入字符串都代表一个整体的数字,那么解决方案将很简单:
'1', '10', '9' | Sort-Object { [int] $_ } # -> '1', '9', '10'
类似地,如果要排序的数字(字符串)存储在输入对象的 属性 中(注意只是
Sort-Object Prop
会 词法排序 ):@{ Prop='1' }, @{ Prop='10' }, @{ Prop= '9' } | Sort-Object { [int] $_.Prop }
@'
0 X6300H_INJ.xtf CSFFILE0032
1 X6301H_INJ.xtf CSFFILE0033
10 X6309H_INJ.xtf CSFFILE0041
11 X6310H_INJ.xtf CSFFILE0042
2 X6311H_INJ.xtf CSFFILE0043
'@ -split '\r?\n' |
Sort-Object { [int] (-split $_)[0] }
注意:@'<newline>...<newline>'@
是一个(逐字)PowerShell here-string; -split '\r?\n'
将多行字符串拆分为行数组。
输出(按第一列数字正确排序):
0 X6300H_INJ.xtf CSFFILE0032
1 X6301H_INJ.xtf CSFFILE0033
2 X6311H_INJ.xtf CSFFILE0043
10 X6309H_INJ.xtf CSFFILE0041
11 X6310H_INJ.xtf CSFFILE0042