使用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
' S'和' r'在第1列中表示发送'并且'收到'分别。第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
答案 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;这导致除以零...
下次请告诉我们,什么不行?没有输出?错误信息?