希望有人可以提供以下建议。
目前我有以下代码,我想在{}括号内为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
东欧
答案 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