【问题标题】:awk to get IP infoawk 获取 IP 信息
【发布时间】:2014-07-01 16:07:56
【问题描述】:

我打算编写一个 bash 脚本来从 ifconfig -a 中提取我想要的信息

但后来我看到了这个 bash 一个班轮:

/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

...我怎样才能改变上面的一个衬里以获得我想要的输出?

【问题讨论】:

标签: awk gawk


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试这个,应该可以的:

     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}'
    

    【讨论】:

    • ifconfig 的输出取决于系统,因此可能需要进行一些调整。
    • 例如 eth1 addr:192.168.1.1
    • @mbbxedh2 我想如果你阅读我的代码你就会明白。
    • 谢谢肯特...我意识到你的是用于 Mac 上的 ifconfig 输出 - 让我有点失望,但我用早晨的眼睛抓住了...再次感谢
    • @mbbxedh2 我没有mac。我的 ifconfig 来自:net-tools 2.10-alpha
    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2014-11-16
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多