首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对终端中的多个字段进行排序?

如何对终端中的多个字段进行排序?
EN

Stack Overflow用户
提问于 2021-05-24 12:22:02
回答 1查看 64关注 0票数 0

我正在寻找用linux终端对我的列表( ip地址的CIDR符号)排序的方法。我的输入列表看起来如下:

代码语言:javascript
运行
复制
1.0.0.0/24
1.0.4.0/22
1.0.16.0/24
1.0.64.0/18
1.0.128.0/17
1.1.1.0/24
1.1.8.0/24
1.1.20.0/24
1.1.64.0/19
1.1.103.0/24
1.1.104.0/21
1.1.112.0/20
1.1.128.0/17
1.2.4.0/24
1.2.11.0/24
1.2.128.0/17
1.3.33.0/24
1.3.34.0/24
1.3.101.0/24
1.4.128.0/17
1.5.0.0/16
1.6.0.0/17
1.6.128.0/18
1.8.18.0/24
1.9.0.0/16
1.10.72.0/23
1.10.128.0/17
1.11.0.0/16
1.16.0.0/18
1.18.116.0/22

我使用终端的排序命令,但不能像我想要的那样排序(,首先,,我想按前缀排序,然后按IP地址排序)。使用排序命令后:

代码语言:javascript
运行
复制
$ sort -t '/' -k 2,2n -k1,1n input > output

在排序命令之后输出:

代码语言:javascript
运行
复制
180.0.0.0/10
183.0.0.0/10
183.192.0.0/10
196.64.0.0/10
208.192.0.0/10
219.0.0.0/10
220.0.0.0/10
221.0.0.0/10
221.192.0.0/10
222.0.0.0/10
223.64.0.0/10
1.128.0.0/11
1.224.0.0/11
2.0.0.0/11
2.96.0.0/11
8.224.0.0/11
13.64.0.0/11
14.32.0.0/11
14.64.0.0/11
20.0.0.0/11
23.192.0.0/11   <---
23.32.0.0/11    <---
27.160.0.0/11
27.192.0.0/11
27.64.0.0/11
31.224.0.0/11
35.160.0.0/11
35.224.0.0/11
36.192.0.0/11
37.160.0.0/11
39.32.0.0/11
39.64.0.0/11

问题是,这仅仅是按第一个八重奏排序。有什么帮助或者更好的解决方法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-25 07:05:00

我就是这样解决的。首先将斜杠(/)改为点(.)然后对我的列表进行排序,并从最后一个点(.)反向交换。使用斜杠(/)以使输出类似于我的原始文件。

交换/转到。使用sed命令:

代码语言:javascript
运行
复制
sed -e 's/\//./g' input > output

使用排序命令按多个字段排序列表:

代码语言:javascript
运行
复制
sort -t '.' -k 5,5n -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k1,1n output > output_sorted

最后改变了最后一点(.)砍伤:

代码语言:javascript
运行
复制
sed 's/\./\//4' output_sorted > origin_sorted_file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67672026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档