我总是想知道sort
在根据数值排序多列时的工作原理。例如:
echo -e " 2 3 \n 1 2 \n 2 10" | sort -n
产生
1 2
2 10
2 3
sort -g
也是如此。如果我想在数字上订购第二列,我提出的唯一解决方案是:
echo -e " 2 3 \n 1 2 \n 2 10" | sort -k1n -k2n
产生所需的输出:
1 2
2 3
2 10
有人可以解释一下这种行为,并判断是否存在更简单的解决方案?
答案 0 :(得分:1)
sort
的POSIX规范说:
-n
将排序键限制为初始数字字符串,包括可选的<blank>
字符,可选的减号,以及带有可选基数字符和数千个分隔符(在当前语言环境中定义)的零个或多个数字,应为按算术值排序。空数字串应被视为零。零上的前导零和符号不应影响排序。
这与说-k1n,1
基本相同。如果要按数字排序多列,则必须这样说:
sort -k1n,1 -k2n,2 …
在逗号后省略“字段结束”时要小心。
答案 1 :(得分:-1)
更简单,(不需要前导-k1n
),但不是很多:
echo -e " 2 3 \n 1 2 \n 2 10" | sort -k2n
输出:
1 2
2 3
2 10