允许打印num-bytes。
我最好的尝试是
{{1}}
这将为我提供大量规则列表,包括第二列中的字节数。不幸的是,获得第二列非常困难。
一种选择是将其传输到文件中,并在文件上使用cut,但目标是尽可能少地进行操作。任何帮助,将不胜感激。
答案 0 :(得分:1)
此bash命令将第二列相加:
c=0; while read a nbyte rest; do ((c+=nbyte)); done < <(sudo iptables -L -n -v -x | grep -i accept); echo $c
或者,写在多行:
c=0
while read a nbyte rest
do
((c+=nbyte))
done < <(sudo iptables -L -n -v -x | grep -i accept)
echo $c
c=0
这会将计数初始化为零。
while read a nbyte rest; do
这会读取一行输入,并将第一列分配到a
,将第二列分配到nbyte
,将所有剩余列分配到rest
。
((c+=nbyte))
这会将nbyte
中的值添加到c
。如果nbyte
包含字符串而不是数字,则bash会将字符串视为零,并将其视为零。
done < <(sudo iptables -L -n -v -x | grep -i accept)
这样就完成了while
循环,并通过进程替换为其提供输入。
echo $c
显示结果。
答案 1 :(得分:0)
如果您通过grep
管道已经很好了,那么我们可以免费将grep
替换为awk
,并在awk
内处理所有数学运算
如果你要包含iptables命令输出的样本,那就太方便了。虽然没有它,但我希望你可以使用它:
sudo iptables -L -n -v -x | awk 'tolower($0)~/accept/{n+=$2} END{printf("%d\n",n)}'
第一个条件在行中查找不区分大小写的“accept”,如果找到它,则将第二个以空格分隔的字段添加到变量中。
第二个条件在输入完成时运行,只需打印变量。