我有这个档案。
$ cat foo.txt
foo 1
foo 12
foo 110
foo 15
foo 120
我想以数字方式对此文件进行排序。但我无法使用sort -n
命令执行此操作。
$ sort -n foo.txt
foo 1
foo 110
foo 12
foo 120
foo 15
我期望的输出就是这个。
foo 1
foo 12
foo 15
foo 110
foo 120
我有两个问题。
sort -n
不按数字排序文件?如果找到两行foo 12
和foo 110
,则初始部分foo
在两者中都相同,因此会强制在数字上比较12
和110
决定12
出现在110
之前,但正如我们在输出中看到的那样,情况并非如此。为什么?答案 0 :(得分:2)
$ sort -nk2 foo.txt
foo 1
foo 12
foo 15
foo 110
foo 120
从排序手册页:
-k, - key = POS1 [,POS2]
在POS1开始一个键,在POS2(原点1)结束
至于问题第一部分的答案:我不确定(即,我没有明确提到它),但是按字段排序,默认分隔符设置为空格。因此,默认情况下,它仅对第一个字段进行排序,并忽略其他字段。如果您尝试组合两个字段,例如通过使用-t
并将其设置为某个未使用的字符(-t$
),-n
对数字字符串值进行排序,这将按字母顺序排列(从{{{ 1}}根本不是数字)。因此,foo
仍然会出现foo 110
。