bash - 对wordcount的输出求和

时间:2013-12-06 08:09:54

标签: bash shell sum

场景:

我有一堆贵宾。在执行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;在上述情况下,我无法总结。请建议

4 个答案:

答案 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 ..

也许不是最优雅的外观,但应该有效