将awk输出分配给shell变量

时间:2013-04-11 09:30:44

标签: variables awk

希望有人可以提供以下建议。

目前我有以下代码,我想在{}括号内为shell变量分配3美元和5美元 - 这是可能的:

while read line; do pntadm -P $line | awk '{if (( $2 == 00 && $1 != 00 ) || ( $2 == 04 )) print $3,$5}'; done < /tmp/subnet_list

让事情变得更加清晰:

root[my-box]# cat /tmp/final_list
111.222.333.0
root[my-box]# pntadm -P 111.222.333.0 | head

Client ID       Flags   Client IP       Server IP       Lease Expiration                Macro           Comment

00A0BCDE1FGHI1  00      111.222.333.001    111.222.333.253     04/06/2013                      macro1
00              04      111.222.333.002    111.222.333.253     Zero                            macro1
00              00      111.222.333.003    111.222.333.253     Zero                            macro1
00A0BCDE1FGHI2  00      111.222.333.004    111.222.333.253     05/06/2013                      macro1
root[my-box]#

我有礼物的代码应从上面挑出三行(IP&#39; 111.222.333.001 ... 002和... 004)。

我是否只需要例如$ 5我可以做到以下几点:

while read line; do date=$( pntadm -P $line | awk '{if (( $2 == 00 && $1 != 00 ) || ( $2 == 04 )) print $5}' ); done < /tmp/subnet_list

但我需要3美元和5美元一起......

如果不使用数组,有人可以告诉我如何在{}括号内为shell变量分配3美元和5美元 - 好吗?

RGDS

东欧

1 个答案:

答案 0 :(得分:2)

您无法在{}括号内“分配shell变量” - 当awk进程退出时,您在awk进程中对环境所做的任何操作都将消失。您需要从awk打印所需的数据并从shell中读取它。试试这个:

while read line; do 
    pntadm -P $line | 
    awk '($2 == "00" && $1 != "00") || ($2 == "04") {print $3,$5}' |
    while read client_ip lease_exp; do
        : do something with $client_ip and $lease_exp
    done 
done < /tmp/subnet_list

或没有awk

while read line; do 
    pntadm -P $line |
    while read clientID flags clientIP serverIP leaseExpiration macro comment; do
        if [[ ($flags == "00" && $clientID != "00") || ($flags == "04") ]]; then
            : do something with $clientIP and $leaseExpiration
        fi
    done 
done < /tmp/subnet_list