【问题标题】:Assigning awk output to shell variables将 awk 输出分配给 shell 变量
【发布时间】:2013-04-11 18:15:43
【问题描述】:

希望有人可以就以下问题提出建议。

目前我有以下代码,我想将 $3 和 $5 分配给 {} 括号内的 shell 变量 - 这可能吗:

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 的 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 美元一起...

如果不使用数组,谁能告诉我如何在 {} 括号内将 $3 和 $5 分配给 shell 变量 - 好吗?

Rgds

中东欧

【问题讨论】:

标签: variables awk


【解决方案1】:

您不能在“{} 大括号内”分配 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

【讨论】:

  • 不错的一个!正是我正在寻找的东西(一段时间内):) 谢谢格伦
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2012-12-12
  • 2013-04-10
  • 1970-01-01
  • 2012-01-27
  • 2016-09-08
  • 2011-08-13
相关资源
最近更新 更多