linux - 按共享相同分隔符的列进行数字排序

标签 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

请问我怎样才能做到这一点?

最佳答案

使用 GNU 排序:sort -V file

-V: natural sort of (version) numbers within text

输出:

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

关于linux - 按共享相同分隔符的列进行数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52789398/

相关文章:

shell - zsh 中的 export USERNAME=root 给出权限错误

python - 为 Linux 命令编写 Python 脚本

python - 在后台运行的交互式 Python 解释器

regex - 使用 sed 删除非字母数字字符

python - conda 和 python shell 脚本

bash - 从 bash 运行时来自 redis-cli 的(空列表或集合)

linux - 显示 tcp http 请求端口 80 Linux

Linux - Kickstart 停止并显示有关网络设备的对话框 - 如何避免

java - 我如何将这个 bat 文件转换为 linux 加载 java 程序的 shell 脚本

python - 需要编写一个 bash 脚本来 ssh 到许多 UNIX 机器上,运行一个 python 脚本并将结果推送到 GitHub