运行以下命令:
/usr/lib/nagios/plugins/check_snmp '-C' 'public' '-H' '10.1.1.1' '-l' 'haState' '-o' '.1.3.6.1.4.1.2620.1.5.6.0'
产生这个:
SNMP OK - haState "active" |
我想将此命令通过管道传输到将输出以下内容的内容:
SNMP OK - haState "active" | state=active
我想我需要以某种方式在 sed 中使用 awk。
想法?
对GNU Awk
进行管道线调用以实现此目的,
echo 'SNMP OK - haState "active" |' | awk '{printf "%s state=%sn",$0,gensub(/"/, "", "g",$(NF-1))}'
SNMP OK - haState "active" | state=active
即
<snmp-command> | awk '{printf "%s state=%sn",$0,gensub(/"/, "", "g",$(NF-1))}'
将检查输出存储在变量中,通过正则表达式匹配提取状态,并使用printf
格式化和打印所需的输出。
regex='haState "(.*)"$'
snmp_output=$(/usr/lib/nagios/plugins/check_snmp '-C' 'public' '-H' '10.1.1.1' '-l' 'haState' '-o' '.1.3.6.1.4.1.2620.1.5.6.0')
if [[ $? == 0 ]]; then
state="unknown"
if [[ "$snmp_output" =~ $regex ]]; then
state="${BASH_REMATCH[0]}"
fi
printf "%s state=$staten" "$snmp_output"
else
: handle the error appropriately
fi