2015-09-23 15 views
0

我早就IP格式的列表,我想将其转换为点格式 做一些研究,并在这里发现了这个伟大的庆典转换长IP列表,以带点的IP

#!/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然后打印结果到文本文件 致以问候

+1

这不是'bash';它是'awk'。 – chepner

回答

0

Perl来拯救!

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

$,设置分隔符。 packN模板将像2130706433这样的字符串转换为字节序列(7f 00 00 01),并将C*模板unpack更改为相应数字的列表。

+0

非常感谢你们:D –

+0

@ChametLeont:只要接受答案,如果它适合你。 – choroba

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