将输出从系统()导入AWK变量后,AWK变量将保留其值

将输出从系统()导入AWK变量后,AWK变量将保留其值,awk,pipe,Awk,Pipe,我想从输出中打印包含IP地址的行:ifconfig$1 如果命令未返回任何内容,则不应打印任何内容(输出应为空) 下面是我正在使用的命令: echo -e "wlan2 \n eth3" | awk '{ command = "ifconfig " $1 " | grep \"inet addr\" "; command | getline output;

我想从输出中打印包含IP地址的行:
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
的所有输出。如果找到匹配项,则打印该行