Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Sorting ';sort-k1 file.txt';和';排序-k1,1 file.txt';?_Sorting_Join - Fatal编程技术网

Sorting ';sort-k1 file.txt';和';排序-k1,1 file.txt';?

Sorting ';sort-k1 file.txt';和';排序-k1,1 file.txt';?,sorting,join,Sorting,Join,如果文件包含多个以逗号分隔的列,如下所示: aaa,1,4,4,5,7 bbb,1,4,9,1,2 “sort-t,-k1 file.txt”和“sort-t,-k1,1 file.txt”之间有区别吗? 虽然与上面的示例没有区别,但在我的一些项目案例中,它 确实存在差异,但这种差异反映在我使用排序文件进行连接的情况下,join命令抛出异常“join:file 2未按排序顺序排列”(当时,我使用“sort-t,-k1 file.txt”)。后来我使用了'sort-t,-k1,1 file.tx

如果文件包含多个以逗号分隔的列,如下所示:

aaa,1,4,4,5,7
bbb,1,4,9,1,2
“sort-t,-k1 file.txt”和“sort-t,-k1,1 file.txt”之间有区别吗? 虽然与上面的示例没有区别,但在我的一些项目案例中,它
确实存在差异,但这种差异反映在我使用排序文件进行连接的情况下,join命令抛出异常“join:file 2未按排序顺序排列”(当时,我使用“sort-t,-k1 file.txt”)。后来我使用了'sort-t,-k1,1 file.txt',join命令工作得很好。有人能告诉我为什么吗?

第二个数字是排序键的结束位置,默认为行的结尾。从手册页:

-k,--key=POS1[,POS2]:

在POS1(原点1)处启动一个键,在POS2处结束它(默认行尾)

所以,是的,有区别。不适用于您的数据,因为
1,1
排序键没有重复项

但在指定
1,1
排序键的地方,有两行:

abc,plugh
abc,xyzzy

可以按任意顺序排序。仅使用
1
(意思是
1,行尾
),它们将按照给定的顺序排序。

排序-k1
表示从键1开始排序,直到行尾<代码>排序-k1,1表示从键1到键1进行排序(因此只有第一个键)。在我的机器上,如果我使用
-s
指定稳定排序,则这两种情况会有所不同:

~ $ cat test.txt
aaa,1,4,4,5,7
aaa,1,3,9,1,2

~ $ sort -t, -k1 -s test.txt
aaa,1,3,9,1,2
aaa,1,4,4,5,7

~ $ sort -t, -k1,1 -s test.txt
aaa,1,4,4,5,7
aaa,1,3,9,1,2

我已经尝试了您的示例,但是如果我不使用'sort-t,-k1,1 test.txt'中的'-s'选项,它也会根据左键进行排序,因此结果与'sort-t,-k1 test.txt'相同。现在我不明白为什么我只指定使用键1进行排序,但是当遇到键1与两行相同时,sort命令将自动按左键排序,而不是按原始顺序排序(因为没有-s选项?),这不是我想要的@Vlad the ImpalaThat这就是稳定标志存在的原因:)如果不指定
-s
,就不能保证有一个稳定的排序,我想这就是您要寻找的。如果需要稳定排序,请使用
-s
标志。