首页 > 解决方案 > 从第 2 行开始的 Powershell 排序

问题描述

我想对一个 .txt 文档进行排序,以便第一行保持在顶部,其余的按数字排序。

我目前有以下内容,但它删除了第一行,并且排序不正确,因为数字是例如 72、2、51、100、201、5 等,所以它排序为 100、2、201, 5、51、72。

我希望将其排序为 2、5、51、72、100、201

$emptyLine = Get-Content C:\Path\Document.txt | Select-Object -Skip 1
$emptyLine | Sort-Object | Out-File C:\Path\Document.txt

我知道这在 Notepad++ 中是可能的,但是需要进行排序的机器不允许安装任何新的东西。

如果有任何解决方案,我非常开放,不需要我安装新软件。

该机器是 Windows 10 Pro x64。

当前图片

期望的结果

当前结果

No        Tool_Name        Tool_Part
72        10        1      9.	   1
43        36        3      29.     1
102       34        1      1.7     1
600       33        1      3.      1
76        3         1      5.3     1
75        3         1      5.5     1
251       2         3      3.      1
73        10        1      5.3     1
50        36        3      15.9    1
64        2         1      6.      1

(发布为 HTML 片段,以使格式更美观)

标签: powershellsort-object

解决方案


利用多值赋值并将输出存储Get-Content在两个变量中,然后只对第二个进行排序:

$First,$Rest = Get-Content C:\Path\Document.txt
@($First; $Rest |Sort-Object) |Set-Content C:\Path\Document.txt

在上述场景中,PowerShell 会将第一行分配给$First,其余的分配给$Rest

如果您需要Sort-Object按字符串属性的第一部分进行排序,就好像它是一个整数一样,您可以这样做:

@($First; $Rest |Sort-Object {(-split $_)[0] -as [int]}) |Set-Content C:\Path\Document.txt

推荐阅读