用数字排序多个列

时间:2016-08-06 08:26:59

标签: shell sorting

我总是想知道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

有人可以解释一下这种行为,并判断是否存在更简单的解决方案?

2 个答案:

答案 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