4

考虑这个片段:

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

这可能与sort吗?如果不是,那么使用 shell 工具实现这种排序的最简单方法是什么?

4

3 回答 3

6

只需添加-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
于 2013-11-09T01:30:19.130 回答
2

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

于 2013-11-09T01:30:38.537 回答
1

您正在寻找“稳定”的排序。尝试排序-s选项(或者更好的是,检查系统上的手册页)。

于 2013-11-09T01:29:49.780 回答