awk获取IP信息

时间:2014-05-13 19:59:14

标签: awk gawk

我打算写一个bash脚本来从ifconfig -a

中提取我想要的信息

然后我看到了这个bash one liner:

/sbin/ifconfig | awk -v RS="\n\n" '{ for (i=1; i<=NF; i++) if ($i == "inet" && $(i+1) ~   /^addr:/) address = substr($(i+1), 6); if (address != "127.0.0.1") printf "%s\t%s\n", $1, address }'

产生的输出如下:

eth1    10.91.5.189
eth2    10.101.3.96

我想删除比这更多的信息.​​..所以我想:

ethX MAC-add IP Bcast Mask

...我怎么能改变上面的一个班轮以获得我之后的输出?

2 个答案:

答案 0 :(得分:0)

试试这个,应该有效:

 ifconfig -a|awk -v RS="" '{for(i=1;i<=NF;i++){
        if($i=="inet")ip=$(i+1);
        else if($i=="broadcast")bcast=$(i+1);
        else if($i=="ether")mac=$(i+1);
        else if($i=="netmask")mask=$(i+1)}
        if(ip!="127.0.0.1")print $1,mac,ip,bcast,mask}'

答案 1 :(得分:0)

这是一个基于Kents verson的工作版本:

ifconfig -a|awk -v RS="" '{for(i=1;i<=NF;i++){
    if($i=="HWaddr") mac=$(i+1)
        else if($i~/addr:[0-9]/) {split($i,a,":");ip=a[2]}
        else if($i~/Mask/) {split($i,a,":");mask=a[2]}}
    if(ip!="127.0.0.1")print $1,mac,ip,bcast,mask}'
eth0 00:18:71:6a:f0:45 192.168.1.30 255.255.255.0

我已跳过Broad Cast地址,因为它始终是该段中的最后一个IP,通常不需要。