如何排序以类似人类的排序顺序显示结果?

5 text-processing sort text text-formatting

在文件的第一个字段上运行 sort 命令,sort -k1,1 file.txt如下所示:

1,2,3
2,1,1
10,2,1
Run Code Online (Sandbox Code Playgroud)

给我:

1,2,3
10,2,1
2,1,1
Run Code Online (Sandbox Code Playgroud)

代替:

1,2,3
2,1,1
10,2,1
Run Code Online (Sandbox Code Playgroud)

我不想在 2 之前有 10 个。有什么办法可以做到这一点吗?

ter*_*don 9

如中所述man sort

   -n, --numeric-sort
          compare according to string numerical value
Run Code Online (Sandbox Code Playgroud)

所以你要:

$ sort -nk1,1 file
1,2,3
2,1,1
10,2,1
Run Code Online (Sandbox Code Playgroud)

另请注意,默认情况下,字段以空白分隔,因此该文件中的那些行只有一个字段。例如,第一行的第一个字段是1,2,3,而不是1。您需要-t ,,-separated字段添加:

sort -t, -nk1,1 file
Run Code Online (Sandbox Code Playgroud)

使用-nsort只考虑在排序键开始时形成有效数字的字符序列(忽略前导空格)。对于第一行, without -t,,取决于sort实现和语言环境,1,2,3将被视为 as1或 as 1.2(当用户的小数分隔符是,)或123(当用户的千位分隔符是,sort忽略它的任何出现时)。