Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
Linux unix仅按单列排序_Linux_Sorting - Fatal编程技术网

Linux unix仅按单列排序

Linux unix仅按单列排序,linux,sorting,Linux,Sorting,我有一个用逗号分隔的数字文件。我只想按第2列对列表进行排序。我的经验是,行只按第二列排序,不按其他列排序。我不想按多个键排序。我知道如何按单个键排序。我这里的问题是,为什么我在第2列给出起始位置和结束位置,为什么它也在第3列排序 文件 排序后 sort -t',' -k2,2 chris.num 1,4,1 1,4,3 1,5,2 1,7,1 1,7,2 然而,我的预期输出是 1,4,3 1,4,1 1,5,2 1,7,2 1,7,1 所以我认为,因为我给了start和end键-k2,2,它

我有一个用逗号分隔的数字文件。我只想按第2列对列表进行排序。我的经验是,行只按第二列排序,不按其他列排序。我不想按多个键排序。我知道如何按单个键排序。我这里的问题是,为什么我在第2列给出起始位置和结束位置,为什么它也在第3列排序

文件

排序后

sort -t',' -k2,2 chris.num
1,4,1
1,4,3
1,5,2
1,7,1
1,7,2
然而,我的预期输出是

1,4,3
1,4,1
1,5,2
1,7,2
1,7,1

所以我认为,因为我给了start和end键-k2,2,它将只根据这个列进行排序,但它似乎也在对其他列进行排序。如何使其仅按第2列排序,而不按其他列排序

除非指定了-u选项,否则比较相等的行的顺序应视为选项-d、-f、-i、-n或-k均不存在(但如果指定了-r,则选项-r仍然有效),且行中的所有字节对比较而言都是重要的。未指定仍然比较相等的行的写入顺序

因此,在您的例子中,当第二列中的两行具有相同的值,因此相等时,将对整行进行比较,以获得最终的顺序

GNU
sort
(可能还有其他实现,但POSIX没有强制要求它)具有
-s
选项,其中具有比较相等键的行以与原始行相同的顺序显示,这是您想要的:

$ sort -t, -s -k2,2n chris.num
1,4,3
1,4,1
1,5,2
1,7,2
1,7,1

从POSIX对
排序的描述中:

除非指定了-u选项,否则比较相等的行的顺序应视为选项-d、-f、-i、-n或-k均不存在(但如果指定了-r,则选项-r仍然有效),且行中的所有字节对比较而言都是重要的。未指定仍然比较相等的行的写入顺序

因此,在您的例子中,当第二列中的两行具有相同的值,因此相等时,将对整行进行比较,以获得最终的顺序

GNU
sort
(可能还有其他实现,但POSIX没有强制要求它)具有
-s
选项,其中具有比较相等键的行以与原始行相同的顺序显示,这是您想要的:

$ sort -t, -s -k2,2n chris.num
1,4,3
1,4,1
1,5,2
1,7,2
1,7,1

可能的重复项等。不确定在我清楚地说明单个列时,为什么会将其标记为重复项或多个键。此外,我了解如何按列排序,我的观点是,它的行为不像我期望的那样,同时提供start和end键pos可能重复的,等等。不知道为什么在我清楚地声明单个列时,会将其标记为重复键或多个键。我也知道如何按列排序,我的观点是它的行为不像我期望的那样同时给出开始和结束键。Hanks@Shawn这是一个极好的回答,解决了我的问题。谢谢@Shawn这是一个极好的回答,解决了我的问题。