请考虑以下代码段:
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工具实现这种排序的最简单方法是什么?
答案 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
选项(或者更好的是,检查系统上的手册页)。