Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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 如果coreutils排序中的数值相等,是否保留原始顺序?_Linux_Bash_Sorting_Gnu Coreutils - Fatal编程技术网

Linux 如果coreutils排序中的数值相等,是否保留原始顺序?

Linux 如果coreutils排序中的数值相等,是否保留原始顺序?,linux,bash,sorting,gnu-coreutils,Linux,Bash,Sorting,Gnu Coreutils,考虑一下这个片段: echo '7 a 3 c 3 b 2 first 2 second 2 third 2 fourth 2 fifth 9 d 2 sixth ' | sort -n -k 1 它的输出为: 2 fifth 2 first 2 fourth 2 second 2 sixth 2 third 3 b 3 c 7 a 9 d 虽然列表按第一个字符的数字键正确排序,但对于那些连续且相等的值,原始顺序已被洗牌。我想获得: 2 first 2 second 2 third 2 fo

考虑一下这个片段:

echo '7 a
3 c
3 b
2 first
2 second
2 third
2 fourth
2 fifth
9 d
2 sixth
' | sort -n -k 1
它的输出为:

2 fifth
2 first
2 fourth
2 second
2 sixth
2 third
3 b
3 c
7 a
9 d
虽然列表按第一个字符的数字键正确排序,但对于那些连续且相等的值,原始顺序已被洗牌。我想获得:

2 first
2 second
2 third
2 fourth
2 fifth
2 sixth
3 c
3 b
7 a
9 d

这可以通过
排序
实现吗?如果没有,使用shell工具实现这种排序的最简单方法是什么?

您正在寻找一种“稳定”的排序。尝试排序
-s
选项(最好是检查系统的手册页)。

只需添加
-s
(稳定排序)标志,这将禁用最后的比较

echo '7 a
3 c
3 b
2 first
2 second
2 third
2 fourth
2 fifth
9 d
2 sixth
' | sort  -k 1,1n -s

2 first
2 second
2 third
2 fourth
2 fifth
2 sixth
3 c
3 b
7 a
9 d

使用
nl
添加行号,管道至
sort-k2,1
以使用行号作为辅助键,然后使用
cut
切断行号。或者使用
排序-s
:p

非常感谢,@1_CR-我确实注意到主页中的“最后手段比较”措辞,因为我觉得这听起来很奇怪-我一次也没有想到它与此相关!感谢您的片段-干杯!除了
-s
,您还需要将您的钥匙指定为
-k1,1
,因为
KEYDEF是启动和停止位置的F[.C][OPTS][,F[.C][OPTS]]<代码>和停止位置默认为线的末端
。因此,如果指定
-k1
,则整个字符串将用于排序。您可以使用
--debug
查看每行中用于排序的部分。@benediktkoppel。FixesMany感谢jdigital——你是第一个,但我更欣赏@1_CR答案中的剪贴;我查看了手册页,但我不知道“禁用最后手段比较”与此相关。干杯“非常感谢,”阿玛丹-起初,我想“什么?”;然后我意识到这是一个聪明的诡计。
:)
欣赏幽默——干杯!