我知道这对于我想要接收的东西看起来有点多,但它是更大脚本的一部分所以必须让两组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
答案 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)
两点六建议:
awk -v intf = $ interface&#39; {print intf}&#39;