Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第2行的Powershell排序_Powershell_Sort Object - Fatal编程技术网

第2行的Powershell排序

第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

我想对一个.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\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机器正在读取的列表,并且它生成表格本身的格式:。但是谢谢,我将来很可能需要这个!