【问题标题】:Unix - alter IP field an csv and output new fileUnix - 将 IP 字段更改为 csv 并输出新文件
【发布时间】:2018-05-22 19:33:34
【问题描述】:

希望对此有一些意见,因为我正在努力。我有一个包含 IP 掩码的 csv,我想在其中获取网络 IP 和广播 IP。 因此,例如,我希望输入字段 1.0.0.0/24 输出 2 个包含值的新字段:一个是 1.0.0.0,另一个是 1.0.0.255。 我有代码可以做到这一点。

对于广播:

for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -b $i);echo 
${bcaddr#BROADCAST=};done

对于网络:

for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -4 $i);echo 
${bcaddr#BROADCAST=};done

我从这里去哪里?如何将这 2 个新字段附加到新的输出文件中?

提前致谢!

【问题讨论】:

    标签: linux file csv unix calc


    【解决方案1】:

    看看这在 RHEL 5.x 上是否有效...你想要在 csv 中使用逗号分隔符的输出吗? for i in $(cat csip.csv); do echo "$i $(ipcalc -n -b $i | grep -E "Address|Broadcast" | awk {'print ","$2'} | tr '\n' ' ')" ; done > new.csv

    对于您的 ipcalc 版本,请尝试以下操作: for i in $(cat csip.csv); do echo "$i $(ipcalc -n -b $i | grep -E "NETWORK|BROADCAST" | awk -F= {'print ","$2'} | tr '\n' ' ')" ; done > new.csv

    【讨论】:

    • 是的,我想要带有逗号分隔符的输出。我试过你的建议。它不会添加新的所需字段,它只是打印 csv 中已有的内容。
    • 答案已更新,请告诉我进展如何。如果它不起作用,我可以看到你的ipcalc -n -b 1.0.0.0/24 的输出吗?
    • 您好,它不起作用。来自源的相同数据,但在每行数据之间添加了空白行。我发了截图here
    • 得到了截图,看我更新的答案,第二个 grep 网络或广播
    【解决方案2】:

    为什么不使用 awk?

    如果您使用的是 Linux(不是 Unix):

    for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -b  $i); echo $bcaddr | egrep -o '([0-9]+\.){3}[0-9]+' ; done > ip.txt
    

    输出:

    1.0.0.255
    1.0.0.0
    

    如果你想在一行中输出:

    for i in $(cat geoip.csv);do bcaddr=$(ipcalc -n -b  $i); echo $bcaddr | egrep -o '([0-9]+\.){3}[0-9]+' ORS=' ' ; done}' > ip.txt
    

    输出:

    1.0.0.255 1.0.0.0
    

    【讨论】:

    • 这两个例子都给了我消息:“ipcalc: netmask or prefix expected”。另外,我希望输出是广播和网络 IP(新字段)在一个新的 .csv 文件中,该文件包含原始文件中的其他字段。
    • 红帽耳鼻喉 5.10
    • 编辑我的答案
    • 谢谢。结果似乎出现在屏幕上,而不是文本文件。
    • 当然,你必须用重定向管道> file
    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多