【发布时间】:2013-11-04 09:36:57
【问题描述】:
我想从我拥有的文件中计算响应时间。响应时间将是从源 (A) 发送数据包到源 (A) 从目标 (B) 接收到 ack 之间的时间。使用 awk 将是提取响应时间的答案。但是,我对如何应用逻辑有点困惑。跟踪文件的下面部分:
+ 0.1 6 0 tcp 40 ------- 1 6.0 2.0 0 0
- 0.1 6 0 tcp 40 ------- 1 6.0 2.0 0 0
+ 0.101172 6 0 tcp 40 ------- 1 6.1 2.1 0 1
- 0.102032 0 1 tcp 40 ------- 1 6.0 2.0 0 0
+ 0.102394 6 0 tcp 40 ------- 1 6.2 2.2 0 2
.......
.....
+ 0.112517 6 0 tcp 40 ------- 1 6.6 2.6 0 6
+ 0.122096 1 2 tcp 40 ------- 1 6.0 2.0 0 0
.....
r 0.148256 0 6 ack 40 ------- 1 2.0 6.0 0 7
r 0.149428 0 6 ack 40 ------- 1 2.1 6.1 0 8
...
在此示例中,我将重点关注源 (6) 和目标 (2) 之间的通信。所以响应时间为(0.148256 - 0.1)。
r 0.148256 0 6 ack 40 ------- 1 2.0 6.0 0 7
这一行显示从 2 端口 0 ($9) 到 ack 的回复 source 6 端口 0 ($10) 被接收,而示例中的第一行:
+ 0.1 6 0 tcp 40 ------- 1 6.0 2.0 0 0
显示请求是由源 (6) 端口 0 ($9) 向目标 (2) 端口 ($10) 发出的。 整个跟踪文件的目标始终是(2),我在想类似的东西: 注意:每次更改端口号(是 $9 或 $10 的一部分)时,都意味着新的请求连接。
记录发起请求的时间:
$1 == "+" && $5 == "tcp" && $6 == 40 && $10== 2.port && $9==source.port ) {
print $2; // would be the start
}
记录收到回复的时间;
$1 == "r" && $5 == "ack" && $6 == 40 && $9== 2.port && $10==source.port ) {
print $2; // would be the end
}
预期的输出可以有两种方式作为一列:
1) 基于流 id,即流 1:
source: 6.0 - 2.0 ---> response time: 0.148256 - 0.1
source: 6.1 - 2.1 ---> response time : end-start
source: any source.port-2.port --> response time : end-start
我的问题我不确定如何自动化代码,所以我可以查看整个跟踪文件并存储响应时间的值。最后我想要图形响应时间。有什么建议么?不要介意其他脚本语言!
【问题讨论】:
-
您的好问题可以通过添加并明确标记“基于上述示例输入的所需输出”部分来解决。您可能还希望使用诸如“#skip”之类的尾随注释来标记您希望跳过的任何输入行。祝你好运!
-
感谢您的提示。检查更新!
-
对不起,我真的没有把它作为示例输出。如果您想要这些文字字符串,只需执行
print " response time\n-------------------\n values"。祝你好运。 -
这些文件有多大?如果它们不是太大,我建议使用 awks 关联数组(映射),方法是创建一个可以从开始行和停止行生成的键。然后你可以存储你想要的任何值,比如使用分隔符并解析它们以在 END 块中显示。我会尝试模拟一些东西,但我不太了解您提出的问题的领域/要求。
-
请尽量使长篇故事更短,更切中要害。不需要解释数据,但需要解释结构。
标签: awk