将输出从系统()导入AWK变量后,AWK变量将保留其值
我想从输出中打印包含IP地址的行:将输出从系统()导入AWK变量后,AWK变量将保留其值,awk,pipe,Awk,Pipe,我想从输出中打印包含IP地址的行:ifconfig$1 如果命令未返回任何内容,则不应打印任何内容(输出应为空) 下面是我正在使用的命令: echo -e "wlan2 \n eth3" | awk '{ command = "ifconfig " $1 " | grep \"inet addr\" "; command | getline output;
ifconfig$1
如果命令未返回任何内容,则不应打印任何内容(输出
应为空)
下面是我正在使用的命令:
echo -e "wlan2 \n eth3" | awk '{
command = "ifconfig " $1 " | grep \"inet addr\" ";
command | getline output;
print $1 output;
}'
输出:
wlan2 inet addr:192.168.0.104 Bcast:192.168.0.255 Mask:255.255.255.0
eth3 inet addr:192.168.0.104 Bcast:192.168.0.255 Mask:255.255.255.0
在这种情况下,wlan2
具有IP,eth3
不具有IP。但是对于eth3
,会打印相同的行
问题:如何确定命令的输出是否为空?或者确保变量
输出
在后续迭代中不会保留其以前的值?假设您确实有理由在awk中这样做(目前,您似乎可以使用shell来完成),您需要做一些更改:
awk '{ command = "ifconfig " $1 " | grep \"inet addr\" " }
command | getline output > 0 { print $1, output }
{ close(command) }'
通过检查getline
的返回值,我们只能在成功时打印该行。使用close
也很重要,这样管道就不会保持打开状态,因为这会导致较大的输入或重复的线路出现问题
似乎在awk中管道到grep
有点反模式,因此您最好在awk中进行模式匹配:
awk '{ command = "ifconfig " $1
while (command | getline output > 0) if (output ~ /inet addr/) print $1, output }
{ close(command) }'
while
循环用于读取ifconfig
的所有输出。如果找到匹配项,则打印该行。假设您确实有在awk中执行此操作的真正原因(目前,您似乎可以使用shell执行此操作),则需要进行一些更改:
awk '{ command = "ifconfig " $1 " | grep \"inet addr\" " }
command | getline output > 0 { print $1, output }
{ close(command) }'
通过检查getline
的返回值,我们只能在成功时打印该行。使用close
也很重要,这样管道就不会保持打开状态,因为这会导致较大的输入或重复的线路出现问题
似乎在awk中管道到grep
有点反模式,因此您最好在awk中进行模式匹配:
awk '{ command = "ifconfig " $1
while (command | getline output > 0) if (output ~ /inet addr/) print $1, output }
{ close(command) }'
while
循环用于读取ifconfig
的所有输出。如果找到匹配项,则打印该行。假设您确实有在awk中执行此操作的真正原因(目前,您似乎可以使用shell执行此操作),则需要进行一些更改:
awk '{ command = "ifconfig " $1 " | grep \"inet addr\" " }
command | getline output > 0 { print $1, output }
{ close(command) }'
通过检查getline
的返回值,我们只能在成功时打印该行。使用close
也很重要,这样管道就不会保持打开状态,因为这会导致较大的输入或重复的线路出现问题
似乎在awk中管道到grep
有点反模式,因此您最好在awk中进行模式匹配:
awk '{ command = "ifconfig " $1
while (command | getline output > 0) if (output ~ /inet addr/) print $1, output }
{ close(command) }'
while
循环用于读取ifconfig
的所有输出。如果找到匹配项,则打印该行。假设您确实有在awk中执行此操作的真正原因(目前,您似乎可以使用shell执行此操作),则需要进行一些更改:
awk '{ command = "ifconfig " $1 " | grep \"inet addr\" " }
command | getline output > 0 { print $1, output }
{ close(command) }'
通过检查getline
的返回值,我们只能在成功时打印该行。使用close
也很重要,这样管道就不会保持打开状态,因为这会导致较大的输入或重复的线路出现问题
似乎在awk中管道到grep
有点反模式,因此您最好在awk中进行模式匹配:
awk '{ command = "ifconfig " $1
while (command | getline output > 0) if (output ~ /inet addr/) print $1, output }
{ close(command) }'
while
循环用于读取ifconfig
的所有输出。如果找到匹配项,则打印该行