shell 能实现这样的功能吗?还是要 python?

2016-07-18 20:53:48 +08:00
 fsckzy
求给点思路,
文件是这样的,大概有 5000 多条
1.0.16.0 1.0.31.255
1.0.64.0 1.0.127.255
1.1.64.0 1.1.127.255
1.5.0.0 1.5.255.255
1.21.0.0 1.21.255.255


要用 shell 把它生成这样的
比如说 1.0.16.0 1.0.31.255 ,就要如下的效果
1.0.16.0
1.0.16.1
1.0.16.2
1.0.16.2

。。。
1.0.16.255
1.0.17.0
1.0.17.1
1.0.17.255
1.0.18.0
1.0.18.255
...
1.0.31.0
1.0.31.255
5069 次点击
所在节点    程序员
33 条回复
petelin
2016-07-18 21:04:47 +08:00
就是从空格分开吧,搜一下 awk
fsckzy
2016-07-18 21:07:36 +08:00
@petelin 不是空格分开,是要 0-255 的生成
billgreen1
2016-07-18 21:10:17 +08:00
2 个 1.0.16.2 是什么鬼?
Bardon
2016-07-18 21:11:14 +08:00
排序?
awk 配合 sort
changshu
2016-07-18 21:12:46 +08:00
两个 IP 之间的区间迭代 shell 下面有 prips 命令, python 下有 netaddr, 处理起来都很方便, 不过都需要装一下
Owenjia
2016-07-18 21:34:25 +08:00
cat <filename> | awk '{print $1"\n"$2}' | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4
这样可以不?
Owenjia
2016-07-18 21:35:41 +08:00
呃,不对,我好像理解错了……
RIcter
2016-07-18 21:35:44 +08:00
shell 可以的(
fsckzy
2016-07-18 21:48:07 +08:00
楼上的都理解错了。
fsckzy
2016-07-18 21:48:17 +08:00
@RIcter 能给点思路吗
Owenjia
2016-07-18 21:49:29 +08:00
@fsckzy
你想要的是不是这样的?
echo 1.0.{16..31}.{0..255}
changshu
2016-07-18 21:50:31 +08:00
parallel --colsep ' ' prips < ip.lst
vimmer
2016-07-18 21:54:02 +08:00
把这个理解为 256 进制的四维数, 就很简单了.
fsckzy
2016-07-18 22:05:05 +08:00
@Owenjia 对,基本是这样,但是我里面的数字不是统一的,有 5000 多条,
lightening
2016-07-18 22:12:30 +08:00
每一行从起始地址到终结地址展开吧?我觉得 Shell 可以,但不知道怎么写。没有特殊需求的话我会用 Python 写省事,但如果你的运行环境只有 shell 的话,肯定也是能用 shell 实现的。
dibage
2016-07-18 22:14:20 +08:00
简单理解就是解析出两个 IP 段之间的 IP 地址列表,是吧?

我推荐用 Python 去实现,思路就是先把 IP 地址转换为整数,然后通过循环两个 IP 段数值计算出这个 IP 段内的 IP 列表。

参考链接: http://stackoverflow.com/questions/5619685/conversion-from-ip-string-to-integer-and-backward-in-python
likuku
2016-07-18 22:15:05 +08:00
或者,先转化成 ipv4 的本源: 32 位的 2 进制数字,再进行你的需求运算,结果转成给人类阅读的 点分 4 个 10 进制数
honorking
2016-07-18 22:32:00 +08:00
必须是万能的 awk:
awk '{split($1,a,".");split($2,b,".");for(i=a[3];i<=b[3];i++){for(j=a[4];j<=b[4];j++){print a[1]"."a[2]"."i"."j}}}' file.txt
msg7086
2016-07-18 23:57:05 +08:00
自然是可以用 shell 来写,不过通常用高级语言写起来更舒服些,比较容易维护。
至少不像楼上这么长的 awk 那么难懂……
RIcter
2016-07-19 00:04:41 +08:00
@fsckzy 想了一下感觉很麻烦…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/293308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX