gpt4 book ai didi

sed - 使用 bash/awk/sed 将 IP 范围转换为离散的 ip 编号

转载 作者:行者123 更新时间:2023-12-04 16:47:36 27 4
gpt4 key购买 nike

我正在处理作为 acl 请求创建的 IP 源/目标/端口列表该请求看起来像这样:

source IP    destination IP  Port
76.211.12.9 10.112.12.232 1521

源 IP 和目标 IP 具有三种不同的格式

  1. x.x.x.x,y,z
  2. x.x.x.x-z
  3. x.x.x.x,y.y.y.y,z,z,z,z

我要创建输出

  1. x.x.x.x
    x.x.x.y
    x.x.x.z
  2. x.x.x.x
    x.x.x.y
    x.x.x.z
  3. x.x.x.x
    y.y.y.y
    z.z.z.z

使用 bash、sed 和 awk 我怎样才能做到这一点?在我的例子中:

76.211.12.9,10,11 10.112.12.232 1521
76.211.12.9-11 10.112.12.232 1521

两个输出看起来像这样:

76.211.12.9 10.112.12.232 1521
76.211.12.10 10.112.12.232 1521
76.211.12.11 10.112.12.232 1521

最佳答案

BEGIN { DEBUG = 0 }

function setup(first_split, second_split) {
src = $1; dst = $2; port = $3
j = split(src, src_a, first_split)
k = split(src_a[4], src_a_2, second_split)
if(DEBUG)
print "<" first_split second_split ">", j, k, "\n" src
}

/^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*,[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/ {
setup(",", ",")
for(i = 1; i <= j; ++i)
print src_a[i], dst, port
next
}

/^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*,[0-9][0-9]*[ ,]/ {
setup(".", ",")
for(i = 1; i <= k; ++i)
print src_a[1] "." src_a[2]"." src_a[3] "." src_a_2[i], dst, port
next
}

/^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*-/ {
setup(".", "-")
for(i = src_a_2[1]; i <= src_a_2[2]; ++i)
print src_a[1] "." src_a[2] "." src_a[3] "." i, dst, port
next
}

{ print }

我的测试文件:

76.211.77.7 10.112.12.232 1521
76.211.77.8 10.112.12.232 1521
76.211.77.9,10,11 10.112.12.232 1521
76.211.77.12-13 10.112.12.232 1521
76.211.77.14,76.211.77.15,76.211.77.16 10.112.12.232 1521

此脚本将在 One True Awk 中运行还有 gawk。

关于sed - 使用 bash/awk/sed 将 IP 范围转换为离散的 ip 编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com