如果coreutils排序中的数值相等,则保留原始订单?

时间:2013-11-09 01:27:03

标签: 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 fourth
2 fifth
2 sixth
3 c
3 b
7 a
9 d

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

3 个答案:

答案 0 :(得分:5)

只需添加-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

答案 1 :(得分:2)

使用nl添加行号,管道到sort -k2,1以使用行号作为辅助键,然后使用cut删除数字。或者使用sort -s。 :P

答案 2 :(得分:1)

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