我不确定我的系统中是否缺乏咖啡因,但我不能为我的生活找出正确的方法是做什么(数学)。
我有一个脚本记录解析的ethtool -S的值,每隔'x'(在此测试期间为6)秒,直到手动停止。我有关于如何计算迭代等的代码,但我无法弄清楚如何正确计算每秒的平均字节数。
这是输出的样子:
Fri Jun 8 23:48:35 GMT 2012 {{{
============== Network Statistics ===============
IFNAME rx_bytes tx_bytes
eth0 27840111418 3083391508
eth4 6153013050 18478875401
eth5 686368648 238683883
eth6 53863181321 2119523154
eth7 23127231747 84602654827
eth8 399517273166 1686004510
Fri Jun 8 23:48:41 GMT 2012 {{{
============== Network Statistics ===============
IFNAME rx_bytes tx_bytes
eth0 27840118248 3083392896
eth4 6153014438 18478876789
eth5 686370036 238685271
eth6 53863182709 2119524542
eth7 23127238019 84602660337
eth8 399519325260 1686018706
正如我们所看到的那样,字节都增加了,我将有数千次迭代。
在每个接口的基础上完全按照这些数字的正确方式是什么,并计算每秒的平均字节数(我最终会通过* 0.00000762939453将其移动到mbps)。
到目前为止,我所尝试的一切都失败了......悲惨地说:\
感谢您的时间/耐心/协助!
编辑:: 我目前认为我需要做的是删除rx / tx字节的原始值以规范化数据。用于提取初始总和的当前(丑陋)字符串是:
int1_rx_bytes=`cat $logfile | grep $int1 | awk '{print $2}' | awk '{sum+=$1} END {printf "%f", sum}'`
我将原始数字放在哪里用于减法目的?作为参考,我已经有一个名为$ int1_orig_rx_bytes的变量
答案 0 :(得分:3)
这两个脚本都未经过测试。
对于移动平均线:
awk 'BEGIN {
period = 10
pcount=1
}
NR == 1 {
baserx = $2
basetx = $3
}
{
rx[$1, pcount] = $2 - baserx
tx[$1, pcount] = $3 - basetx
ifaces[$1]
if (c >= period) {
rxsum = txsum = 0
for (iface in ifaces) {
for (i = 1; i <= period; i++) {
rxsum += rx[iface, i]
txsum += tx[iface, i]
}
print iface, rxsum / period, txsum / period
}
} else {
c++
}
pcount = (pcount + 1) % period + 1
}'
修改强>
所有参赛作品的平均值:
awk '
NR == 1 {
baserx = $2
basetx = $3
}
{
rx[$1] += $2 - baserx
tx[$1] += $3 - basetx
}
END {
for (iface in rx) {
print iface, rx[iface] / NR, tx[iface] / NR
}
}'
无法保证输入条目的顺序。如果你有gawk
,你可以添加一个排序函数来处理它,或者你可以使用sort
实用程序。
编辑2:
这解决了上述第二版的所有问题。
awk '
BEGIN {
OFMT = "%.4f"
}
/^[[:blank:]]*$/ { next }
! ($1 in prevrx) {
prevrx[$1] = $2
prevtx[$1] = $3
next
}
{
count[$1]++
drx = $2 - prevrx[$1]
dtx = $3 - prevtx[$1]
rx[$1] += drx
tx[$1] += dtx
prevrx[$1] = $2
prevtx[$1] = $3
}
END {
for (iface in rx) {
print iface, rx[iface] / count[iface], tx[iface] / count[iface]
}
}'