awk没有打印预期的字段...(此刻什么都没有)

时间:2015-02-26 02:30:36

标签: bash awk

我知道这对于我想要接收的东西看起来有点多,但它是更大脚本的一部分所以必须让两组awk命令以他们的方式进行管道传输。

如果我有一个环境,例如:

interface=br1

我的命令是:

ip address show | awk '/\<inet\>/ { print $NF, '\t', $2 }' | awk '/\<"$(echo $interface)\>/ { print $3 }'

有谁知道为什么我无法获得我期望的适当IP输出?

编辑:

我想稍微编辑一下,以便更多地解释我想要做的事情。我从ip address show提取信息,以便为两个不同的变量提供信息。

用户选择一个变量。那是接口名称。第二个变量来自用户的选择。并且该衍生物直接放入另一个命令中,该命令将在序列的末尾运行。

简单地说,我正在为virt-install创建一个命令行助手。

用户选择他们想要与VM一起使用的桥接器或接口,然后将其设置为$interface变量,目的地为--network=bridge:标志。

但是,控制台重定向直接受所选接口的影响。因此我在其位置替换了此命令:

NETWORK=ip address show | awk '/\<inet\>/ { print $NF, '\t', $2 }'
.....
echo "Please choose your bridge interface"
$NETWORK
printf "Interface: ": read interface
......
--graphics vnc,listen=`$NETWORK | awk -v i=$interface '/\<i\>/ { print $2 }'`,port=5910,keymap=jp

2 个答案:

答案 0 :(得分:1)

您不需要2 awk,因为您可以一步过滤您想要的内容

export interface=br1
ip address show | awk '/\<inet\>/ && $NF == interface { print $NF, '\t', $2 }' interface="$interface"

或者,您只需提供ip

的界面即可
ip address show $interface | awk '/\<inet\>/ { print $NF, '\t', $2 }'

修改

如果您只想要没有掩码的IP地址

ip address show $interface | awk '/\<inet\>/ { sub("/.*$", "", $2); print $2; }'

尝试

man awk

查看可用的功能。

答案 1 :(得分:0)

两点六建议:

  1. 尝试打印而不是回显
  2. awk并不免费为您提供环境变量,因此您需要将变量传入。一旦您这样做,在使用变量时不要使用美元符号:< / LI>

    awk -v intf = $ interface&#39; {print intf}&#39;