将long ip列表转换为dotted ip

时间:2015-09-23 13:25:13

标签: bash ip long-integer

我有一个长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转换然后打印结果到文本文件 最好的问候

2 个答案:

答案 0 :(得分:0)

Perl救援!

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

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

答案 1 :(得分:0)

给定的awk代码段假设它将被调用一次。您可以对其进行调整以处理输入文件的每一行。

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