powershell - 仅使用 powershell,对包含 300 行的文本文件进行排序,首先按字符串长度排序,然后,一旦达到该长度,按字母顺序设置它们

标签 powershell

我正在尝试将此作为 powershell 中的一个衬里来执行,以便我可以继续根据检查字符串检查这些字符串。 我遇到的麻烦是无论我做什么,我都只能按字符串长度设置。

以下尝试未能获得所需的结果。一个文本很好,另一个按长度成功。我也尝试过将它们通过管道输入,但我相信两者都不接受管道输入。

感谢您的帮助,因为我是 Powershell 的新手。

PS C:\Users\IEUser> Get-Content Desktop/dict.txt | Sort-Object 
PS C:\Users\IEUser> Get-Content Desktop/dict.txt | Sort-Object -Property Length 

最佳答案

给定示例数组$toSort:

$toSort = @(
    'abcdefghwxyefg'
    'abcdefghghijkl'
    'abcdefghwxyefgabcdzx'
    'abcdefghwxyefgabcdef'
    'abcdzx'
    'abcdef'
    'abzxc'
    'abcde'
    'wxy'
    'efg'
    'abcdefgh'
    'ijklmnop'
)

您可以使用 Sort-Object首先按 Length 属性对数组进行排序,然后按字母顺序排序,如下所示:

$toSort | Sort-Object Length, { $_ }

谢谢 Mathias为了指出这一点,我之前使用的是 { $_[0] } ,它只会对每行的第一个字符进行排序。


包括实际答案应该如何:

Get-Content Desktop/dict.txt | Sort-Object -Property Length, { $_ } |
    Out-File path/to/sortedDict.txt

如果你想玩得开心 LINQ您可以先使用 OrderBy 来完成相同的操作按 LengthThenBy 排序字母顺序:

[Linq.Enumerable]::ThenBy(
    [Linq.Enumerable]::OrderBy($toSort, [Func[object, int]]{param($s) $s.Length }),
    [Func[object, string]]{param($s) $s }
)

关于powershell - 仅使用 powershell,对包含 300 行的文本文件进行排序,首先按字符串长度排序,然后,一旦达到该长度,按字母顺序设置它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68329174/

相关文章:

powershell - 在Powershell中提示输入

powershell - 为什么TFS历史记录命令在工作区命令有效时返回 “TF30063: You are not authorized to access …”

powershell - 将PowerTime从Powershell转换为可用的方式,但无法使其正常工作

powershell - select cmdlet 不接受计算属性中生成的字符串名称

powershell - Powershell添加不需要的小数(加法)

linux - 在 azure 中使用 ssh key 创建 vm 时出错

powershell - Web浏览器控件中的Powershell UI自动化

azure - 在 AzureDevOps Pipeline 中按 "."分割字符串无法按预期工作

powershell - powershell中破折号的问题

powershell - 乌类图 : 'Login-AzureRmAccount' is not recognized as the name of a cmdlet