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
两点六建议:
- 尝试打印而不是回显
- 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
查看可用功能。
我知道这对于我尝试接收的内容来说似乎有点多,但它是更大脚本的一部分,因此有必要按原样传送两组 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
两点六建议:
- 尝试打印而不是回显
- 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
查看可用功能。