场景:
我有一堆贵宾。在执行NSLOOKUP时,输出通常返回具有一个公共IP的输出。在负载均衡器失败的情况下,NSLOOKUP返回两个公共IP。对于这种情况,我想写一个脚本。
逻辑:
for i vip1 vip2 vip3; do nslookup $i | grep -v "<private IP> | grep 'Address:' | wc -l ; done
在理想情况下,输出看起来像
1
1
1
如果我可以对输出求和,则会说3.如果出现问题,输出将显示总和&gt;在上述情况下,我无法总结。请建议
答案 0 :(得分:1)
echo vip1 vip2 vip3 | xargs -n 1 nslookup | \
awk '/Address/ && !/<private-ip>/ {s++} END{print s}'
答案 1 :(得分:0)
使用awk
:
user@host:~# cat blub | awk '{ SUM += $1} END { print SUM }'
4
blub是一个包含内容的文件:
user@host:~# cat blub
1
2
1
答案 2 :(得分:0)
不是求和,而是计算整个循环中的匹配。并使用grep -c
进行匹配并一步计算。
for i in vip1 vip2 vip3
do
nslookup "$i"
done | grep -v "<private IP>" | grep -c 'Address'
答案 3 :(得分:0)
要获得总和,您可以将命令替换为算术评估构造。如果您的管道产生一个整数,那么尝试使用以下循环:
for i in vip1 vip2 vip3; do
((sum += $(nslookup $i | .. rest of pipeline .. | wc -l)))
done
# .. do something with $sum ..
也许不是最优雅的外观,但应该有效