gnu / unix只使用第一列排序?

时间:2014-07-17 20:08:01

标签: sorting unix field gnu numeric

使用常规字符串,如果第一个字段匹配,我们按下一个字段排序,依此类推,事情就像我们期望的那样。

echo -e 'a c\na b' | sort  #regular string sort
a b
a c

对于数字,如果第一个字段匹配,我们......在后续字段中切换到字符串排序?为什么?我认为它会用数字比较每个字段。

echo -e '1 22\n1 3' | sort -n   #numeric sort
1 22
1 3

仅供参考,在RHEL 5.5上使用sort(GNU coreutils)5.97。

我在这里缺少什么?我知道我可以使用-k来选择我想要排序的字段,但这大大降低了允许输入的灵活性,因为它要求用户知道字段的数量。

谢谢!

1 个答案:

答案 0 :(得分:1)

可悲的是,你没有错过任何东西。这个看似简单的任务 - 将行拆分为字段,然后在所有中进行数字排序 - 无法通过unix排序程序完成。您只需弄清楚有多少列,并将它们全部分别命名为键。

当您指定-n没有其他选项时发生的事情是整条线传递给"将字符串转换为数字"例程,它转换行开头的数字并忽略其余的数字。根本没有拆分成字段。

你的第一个例子,没有-n,也在进行全线比较。它没有比较" a"到" a"那么" b"到" c"。它正在比较" a b"到" c"。