AWK模数与跟踪文件无法正常工作

时间:2016-01-29 09:58:18

标签: awk

使用AWK,我试图解析这样的跟踪文件:

s 5.072000000 _59_ AGT  --- 9 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [9] 0 0
r 5.072000000 _59_ RTR  --- 9 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [9] 0 0
s 5.080000000 _59_ AGT  --- 10 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [10] 0 0
r 5.080000000 _59_ RTR  --- 10 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [10] 0 0
s 5.088000000 _59_ AGT  --- 11 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [11] 0 0
r 5.088000000 _59_ RTR  --- 11 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [11] 0 0
s 5.096000000 _59_ AGT  --- 12 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [12] 0 0
r 5.096000000 _59_ RTR  --- 12 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [12] 0 0
s 5.104000000 _59_ AGT  --- 13 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [13] 0 0
r 5.104000000 _59_ RTR  --- 13 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [13] 0 0
s 5.112000000 _59_ AGT  --- 14 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [14] 0 0
r 5.112000000 _59_ RTR  --- 14 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [14] 0 0
s 5.120000000 _59_ AGT  --- 15 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [15] 0 0
r 5.120000000 _59_ RTR  --- 15 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [15] 0 0
s 5.128000000 _59_ AGT  --- 16 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [16] 0 0
r 5.128000000 _59_ RTR  --- 16 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [16] 0 0
s 5.136000000 _59_ AGT  --- 17 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [17] 0 0
r 5.136000000 _59_ RTR  --- 17 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [17] 0 0
s 5.144000000 _59_ AGT  --- 18 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [18] 0 0
r 5.144000000 _59_ RTR  --- 18 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [18] 0 0
s 5.152000000 _59_ AGT  --- 19 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [19] 0 0
r 5.152000000 _59_ RTR  --- 19 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [19] 0 0
s 5.160000000 _59_ AGT  --- 20 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [20] 0 0
r 5.160000000 _59_ RTR  --- 20 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [20] 0 0
s 5.168000000 _59_ AGT  --- 21 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [21] 0 0
r 5.168000000 _59_ RTR  --- 21 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [21] 0 0
s 5.176000000 _59_ AGT  --- 22 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [22] 0 0
r 5.176000000 _59_ RTR  --- 22 cbr 1000 [0 0 0 0] [energy 1994.974330 ei 5.011 es 0.000 et 0.001 er 0.014] ------- [59:0 0:0 32 0] [22] 0 0

&#39; S&#39;和&#39; r&#39;在第1列中表示发送&#39;并且&#39;收到&#39;分别。第2列显示时间。我想在所有行上运行以下分支指令,从而计算传递速率,即nRecvd/nSent*100的百分比,但<10>间隔之间的。接下来,我想为FILE的每个间隔附加时间和交付率(成对),以便稍后我可以使用这些对进行绘图。但是,以下AWK代码不会给我任何输出。我哪里错了?

BEGIN{
 nSent=0;
 nRecvd=0;
 nDropped=0;
 FILE="delivery.txt"
}

{
if ($1 == "s" && $4 == "AGT") nSent++;
else if ($1 =="r" && $4 == "AGT") nRecvd++;
else if ($1 =="D") nDropped++;
if ($1 == "r" && $4 =="AGT" && ($2 % 10) ==0) { 
 print $2 " " nSent/nReceived*100 "\n" >>FILE;
 nSent=0;
 nRecvd=0;
}

}

END {

}

更新:

跟踪文件的另一部分如下:

r 10.103806919 _0_ AGT  --- 120 cbr 1020 [13a 0 21 800] ------- [33:0 0:0 30 0] [7] 1 0
s 10.104000000 _33_ AGT  --- 126 cbr 1000 [0 0 0 0] [energy 1989.895903 ei 9.962 es 0.000 et 0.076 er 0.066] ------- [33:0 0:0 32 0] [13] 0 0
r 10.104000000 _33_ RTR  --- 126 cbr 1000 [0 0 0 0] [energy 1989.895903 ei 9.962 es 0.000 et 0.076 er 0.066] ------- [33:0 0:0 32 0] [13] 0 0
s 10.104000000 _33_ RTR  --- 126 cbr 1020 [0 0 0 0] [energy 1989.895903 ei 9.962 es 0.000 et 0.076 er 0.066] ------- [33:0 0:0 30 0] [13] 0 0
r 10.104096612 _33_ MAC  --- 0 ACK 38 [0 21 0 0] [energy 1989.895903 ei 9.962 es 0.000 et 0.076 er 0.066] 
r 10.104114453 _14_ MAC  --- 0 AODV 48 [0 ffffffff f 800] [energy 1989.895886 ei 10.069 es 0.000 et 0.003 er 0.032] ------- [33:255 -1:255 

2 个答案:

答案 0 :(得分:1)

我想这是因为你的模数。确实,在awk 1.00001 % 2 = 1.00001中。因此,如果你从未有过一个四舍五入的时间(即X.0),你的最后一个永远不会是真的。尝试使用int()

if ($1 == "r" && $4 =="AGT" && (int($2) % 10) == 0)

答案 1 :(得分:1)

您在打印规则中使用nReceived,该规则从未设置/修改过。所以最有可能导致错误。

&#34; r&#34;示例输入$4中的行始终为&#34; RTR&#34;这导致除以零...

下次请告诉我们,什么不行?没有输出?错误信息?