【问题标题】:Convert a list of long ip to dotted ip将长ip列表转换为dotted ip
【发布时间】:2015-09-23 13:25:12
【问题描述】:

我有一个长 ip 格式列表,我想将其转换为点格式 做一些研究,在这里发现了这个很棒的 bash

    #!/usr/bin/awk -f
# dec2ip
BEGIN {
    dec = ARGV[1]
    for (e = 3; e >= 0; e--) {
        octet = int(dec / (256 ^ e))
        dec -= octet * 256 ^ e
        ip = ip delim octet
        delim = "."
    }
    printf("%s\n", ip)
}

但它会一一转换 请如何使其打开文件并转换所有 ip 然后将结果打印到文本文件中 最好的问候

【问题讨论】:

  • 那不是bash;这是awk

标签: bash ip long-integer


【解决方案1】:

Perl 来救援!

perl -lnwe '$, = "."; print unpack "C*", pack "N", $_' < input-file

$, 设置分隔符。 packN 模板将类似 2130706433 的字符串转换为字节序列 (7f 00 00 01),unpackC* 模板将其转换为相应数字的列表。

【讨论】:

  • @ChametLeont:如果它对您有用,请接受答案。
【解决方案2】:

给定的awk sn-p 假定它会被调用一次。您可以调整它来处理输入文件的每一行。

awk '{ dec=$0;
       delim="";
       for (e = 3; e >= 0; e--) {
           octet = int(dec / (256 ^ e));
           dec -= octet * 256 ^ e;
           ip = ip delim octet;
           delim = ".";
       }'
       printf("%s\n", ip)}' list_of_integer_ip_addresses.txt

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2018-05-26
    • 2017-08-23
    • 2015-05-09
    相关资源
    最近更新 更多