Linux 当每行不以数字开头时,在shell中进行数字排序
我有这个档案Linux 当每行不以数字开头时,在shell中进行数字排序,linux,shell,posix,Linux,Shell,Posix,我有这个档案 $ 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 我有两个问题 为什么排序-n不对文件进行数字排序?当它找到两行foo 12和foo 110时,初始部分fo
$ 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
我有两个问题
排序-n
不对文件进行数字排序?当它找到两行foo 12
和foo 110
时,初始部分foo
在这两行中是相同的,因此它将被迫对12
和110
进行数字比较,并确定12
在110
之前,但正如我们在输出中看到的,情况并非如此。为什么?在POS1处开始关键点,在POS2处结束关键点(原点1) 至于你问题第一部分的答案:我不确定(也就是说,我没有明确提到),但排序是按字段进行的,默认分隔符设置为空白。因此,默认情况下,它只对第一个字段进行排序,而忽略其他字段。如果您尝试合并这两个字段,例如通过使用
-t
并将其设置为某个未使用的字符(-t$
),-n
对数字字符串值进行排序,该值将按字母顺序排列(因为foo
根本不是数字)。因此,foo 110
仍然会出现在foo 12
之前
$ sort -nk2 foo.txt
foo 1
foo 12
foo 15
foo 110
foo 120