按bash中的所有字段数字排序

时间:2018-08-02 09:20:24

标签: bash sorting

我有一个文件,每行有多个数字,并用逗号隔开:

1,13,2,5
1,3
2,3,24
1,13,2,6

这只是一个小示例文件。在实际文件中,每行可以有数百个数字。

如何按字段对它们进行数字排序?结果应该是:

1,3
1,13,2,5
1,13,2,6
2,3,24

我尝试了sort -n -t,,但是这会将行与数字进行比较,从而产生了错误的结果。

1 个答案:

答案 0 :(得分:2)

实际上,这与sort处理数字字段的方式有关。结果是您需要明确告诉sort对每个关键字段进行数字排序:

sort -t, -k1,1n -k2,2n -k3,3n -k4,4n

如果您不这样做,那么GNU info的{​​{1}}部分会稍加释义,

  

sort将使用从[first]字段开始的所有字符,并且   扩展到该行的末尾作为主数字键。对于   绝大多数应用程序,处理范围更广的密钥   一个字段作为数字将不能满足您的期望。

巧妙地总结了您所看到的内容!

显然,显式地指定键将使sort不适用于每行上具有任意长数字列表的文件。作为一种技巧,您可以尝试使用GNU sort及其版本排序选项sort

-V

似乎可以对您的特定数据执行正确的操作。我已经在具有600个数字的行上测试了sort -V ,并且工作正常。