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

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

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

1,2,3
2,1,1
10,2,1

给我:

1,2,3
10,2,1
2,1,1

代替:

1,2,3
2,1,1
10,2,1

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

答案1

正如中所解释的man sort

   -n, --numeric-sort
          compare according to string numerical value

所以你要:

$ sort -nk1,1 file
1,2,3
2,1,1
10,2,1

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

sort -t, -nk1,1 file

使用 时-nsort仅考虑在排序键开头形成有效数字的字符序列(忽略前导空格)。对于第一行,没有-t,,根据sort实现和区域设置,1,2,3将被视为或1作为1.2(当用户的小数分隔符为 时,)或123(当用户的千位分隔符为 时,sort忽略它的任何出现)。

答案2

把这个留给任何偶然发现这个的人:sort -V -k1,1 file.txt应该有效。

相关内容