第2行的Powershell排序
我想对一个.txt文档进行排序,以便第一行保持在顶部,其余的按数字排序 我目前有以下内容,但它删除了第一行,排序不正确,因为数字是72、2、51、100、201、5等。 所以它将其排序为100,2201,5,51,72 我想把它分类成2,5,51,72,100,201第2行的Powershell排序,powershell,sort-object,Powershell,Sort Object,我想对一个.txt文档进行排序,以便第一行保持在顶部,其余的按数字排序 我目前有以下内容,但它删除了第一行,排序不正确,因为数字是72、2、51、100、201、5等。 所以它将其排序为100,2201,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\D
$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
无工具名称工具零件
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利用多值赋值,将Get Content的输出存储在两个变量中,然后仅对第二个变量进行排序:
$First,$Rest = Get-Content C:\Path\Document.txt
@($First; $Rest |Sort-Object) |Set-Content C:\Path\Document.txt
在上面的场景中,PowerShell将第一行分配给$first,其余的分配给$rest
如果需要Sort对象按字符串属性的第一部分进行排序,就像它是整数一样,可以这样做:
@($First; $Rest |Sort-Object {(-split $_)[0] -as [int]}) |Set-Content C:\Path\Document.txt
利用多值赋值,将Get Content的输出存储在两个变量中,然后仅对第二个变量进行排序:
$First,$Rest = Get-Content C:\Path\Document.txt
@($First; $Rest |Sort-Object) |Set-Content C:\Path\Document.txt
在上面的场景中,PowerShell将第一行分配给$first,其余的分配给$rest
如果需要Sort对象按字符串属性的第一部分进行排序,就像它是整数一样,可以这样做:
@($First; $Rest |Sort-Object {(-split $_)[0] -as [int]}) |Set-Content C:\Path\Document.txt
可以使用,跳过头,而不是做一些技巧来重建表,但也可以考虑使用“从”将表直接转换为对象:
$List = Get-Content C:\Path\Document.txt | ConvertFrom-SourceTable
不幸的是,第一列中的数字似乎是左对齐的,如果它们与此答案的最终结果一样右对齐,则ConvertFrom SourceTable cmdlet会自动将第一列“否”计算为数字。
这意味着您需要自己将第一列转换为整数,以便能够按照建议对它们进行排序。可以通过使用并创建计算特性来执行此操作:
Select-Object @{n='No'; e={[Int]$_.No}}, Tool_Name, Tool_Part
之后,您可以简单地使用对其进行排序:
Sort-Object No
举一个例子:
ConvertFrom-SourceTable '
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
' | Select-Object @{n='No'; e={[Int]$_.No}}, Tool_Name, Tool_Part | Sort-Object No
此示例将导致:
No Tool_Name Tool_Part
-- --------- ---------
43 36 29. 1
50 36 15.9 1
64 2 6. 1
72 10 9. 1
73 10 5.3 1
75 3 5.5 1
76 3 5.3 1
102 34 1.7 1
251 2 3. 1
600 33 3. 1
由于不清楚Tool_Name和Tool_Part之间的列是否属于这两个列中的任何一个,因为Tool_Part可以是左对齐的,也可以是右对齐的,因此您可以自己为ConvertFrom SourceTable提供一个标尺来解决此问题:
ConvertFrom-SourceTable -Ruler '--- ----------- ---------' '
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
' | Select-Object @{n='No'; e={[Int]$_.No}}, Tool_Name, Tool_Part | Sort-Object No
结果:
No Tool_Name Tool_Part
-- --------- ---------
43 36 3 29. 1
50 36 3 15.9 1
64 2 1 6. 1
72 10 1 9. 1
73 10 1 5.3 1
75 3 1 5.5 1
76 3 1 5.3 1
102 34 1 1.7 1
251 2 3 3. 1
600 33 1 3. 1
可以使用,跳过头,而不是做一些技巧来重建表,但也可以考虑使用“从”将表直接转换为对象:
$List = Get-Content C:\Path\Document.txt | ConvertFrom-SourceTable
不幸的是,第一列中的数字似乎是左对齐的,如果它们与此答案的最终结果一样右对齐,则ConvertFrom SourceTable cmdlet会自动将第一列“否”计算为数字。
这意味着您需要自己将第一列转换为整数,以便能够按照建议对它们进行排序。可以通过使用并创建计算特性来执行此操作:
Select-Object @{n='No'; e={[Int]$_.No}}, Tool_Name, Tool_Part
之后,您可以简单地使用对其进行排序:
Sort-Object No
举一个例子:
ConvertFrom-SourceTable '
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
' | Select-Object @{n='No'; e={[Int]$_.No}}, Tool_Name, Tool_Part | Sort-Object No
此示例将导致:
No Tool_Name Tool_Part
-- --------- ---------
43 36 29. 1
50 36 15.9 1
64 2 6. 1
72 10 9. 1
73 10 5.3 1
75 3 5.5 1
76 3 5.3 1
102 34 1.7 1
251 2 3. 1
600 33 3. 1
由于不清楚Tool_Name和Tool_Part之间的列是否属于这两个列中的任何一个,因为Tool_Part可以是左对齐的,也可以是右对齐的,因此您可以自己为ConvertFrom SourceTable提供一个标尺来解决此问题:
ConvertFrom-SourceTable -Ruler '--- ----------- ---------' '
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
' | Select-Object @{n='No'; e={[Int]$_.No}}, Tool_Name, Tool_Part | Sort-Object No
结果:
No Tool_Name Tool_Part
-- --------- ---------
43 36 3 29. 1
50 36 3 15.9 1
64 2 1 6. 1
72 10 1 9. 1
73 10 1 5.3 1
75 3 1 5.5 1
76 3 1 5.3 1
102 34 1 1.7 1
251 2 3 3. 1
600 33 1 3. 1
您能提供示例输入吗?Heine,欢迎使用Stackoverflow,为了在您的问题上获得更好、更快的结果,并为回答问题的人节省一些时间,我建议您添加文本格式的输入/所需/当前列表,而不是图片。您好,谢谢。哦,是的,对我来说很有意义!对不起,我会记住的@Heine,我已经更改了关于给定源表的答案。您能提供示例输入吗?Heine,欢迎使用Stackoverflow,为了在您的问题上获得更好更快的结果并节省回答人员的时间,我建议您以文本格式而不是图片的形式添加输入/所需/当前列表。您好,谢谢。哦,是的,对我来说很有意义!对不起,我会记住的@Heine,我已经更改了关于给定源表的答案。我认为问题在于列表需要按照第一列的整数值排序,而不是整行字符串……这是最有效的方法!非常感谢。有没有可能让它认识到002而不是2的缺失?抱歉,完全错过了@HeineKristensen-更新答案的那部分!非常感谢你!我认为问题是
在列表中,需要根据第一列的整数值而不是整行字符串进行排序…这是最有效的!非常感谢。有没有可能让它认识到002而不是2的缺失?抱歉,完全错过了@HeineKristensen-更新答案的那部分!非常感谢你!这真的很好,但我无法格式化表格,因为它是某台CNC机器正在读取的列表,并且它生成表格本身的格式:。但是谢谢,我将来很可能需要这个!这真的很好,但我无法格式化表格,因为它是某台CNC机器正在读取的列表,并且它生成表格本身的格式:。但是谢谢,我将来很可能需要这个!