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

awk not printing the field expected... (at the moment nothing at all)

我知道这对于我尝试接收的内容来说似乎有点多,但它是更大脚本的一部分,因此有必要按原样传送两组 awk 命令。

前提是我有这样的环境:

interface=br1

我的命令是:

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

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

编辑:

我想对此进行一些编辑,以更多地解释我正在尝试做的事情。我正在从 ip address show 中提取信息以向两个不同的变量提供信息。

一个变量由用户选择。那是接口名称。第二个变量源自用户的选择。并且该导数直接放入另一个命令中,该命令在序列末尾为 运行。

简而言之,我正在为 virt-install 创建一个命令行助手。

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

然而,控制台重定向直接受所选接口的影响。因此我用这个命令代替了它:

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

两点六建议:

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

awk -v intf=$interface '{ print intf }'

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

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

或者,您可以只提供 ip

的接口
ip address show $interface | awk '/\<inet\>/ { print $NF, '\t',  }'

编辑

如果你只想要不带掩码的IP地址

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

尝试

man awk

查看可用功能。