按具有相同定界符的列进行数字排序

时间:2018-10-13 03:57:50

标签: linux bash shell sorting

我的文件中包含以下内容:

172.16.0.3  3.2.10  User exists
172.16.0.2  1.1.11  User don't exist
172.16.0.4  4.1.1   User exists
172.16.0.4  4.1.13  User exists
172.16.0.3  3.5.4   User exists
172.16.0.2  3.1.15  User exists

我想按第一列对其进行排序,然后按数字顺序对第二列进行排序。我知道sort命令及其-k-t选项。但是,由于第1列和第2列都有相同的定界符.,所以我不确定如何实现我的目标。

我预期的sort -n -t . -k 1,1 -k 2,2生成方式(请注意,172.16.0.4之前4.1.1之前4.1.13的排序未正确完成):

172.16.0.2  1.1.11  User don't exist
172.16.0.2  3.1.15  User exists
172.16.0.3  3.2.10  User exists
172.16.0.3  3.5.4   User exists
172.16.0.4  4.1.13  User exists
172.16.0.4  4.1.1   User exists

所需的输出应如下所示:

172.16.0.2  1.1.11  User don't exist
172.16.0.2  3.1.15  User exists
172.16.0.3  3.2.10  User exists
172.16.0.3  3.5.4   User exists
172.16.0.4  4.1.1   User exists
172.16.0.4  4.1.13  User exists

请问如何实现?

1 个答案:

答案 0 :(得分:0)

使用GNU排序:sort -V file

  

-V:文本中自然的(版本)数字

输出:

172.16.0.2  3.1.15  User exists
172.16.0.3  3.2.10  User exists
172.16.0.3  3.5.4   User exists
172.16.0.4  4.1.1   User exists
172.16.0.4  4.1.13  User exists