gpt4 book ai didi

linux - 每 k 秒/毫秒/的平均 tcpdump

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:07 27 4
gpt4 key购买 nike

我有一个小问题希望你能帮助我。让我们采用以下输入文件(使用 tcpdump 生成):

00:20:30.812373 52
00:20:30.833678 52
00:20:30.971499 52
00:20:30.993451 52
00:20:31.067043 634
00:20:31.067075 98
00:20:31.068532 31
00:20:31.068532 59
00:20:31.068547 31
00:20:31.068547 59
00:20:31.184758 417
00:20:31.184758 445
00:20:31.184807 205
00:20:31.184807 233
00:20:31.184907 417
00:20:31.184907 445
00:20:31.184945 205
00:20:31.184945 233
00:20:31.188924 52
00:20:31.305726 60
00:20:31.479941 52
00:20:31.491047 1500
00:20:31.491100 652
00:20:31.491118 1500
00:20:31.491133 652
00:20:31.491147 1500
00:20:31.491164 1500
00:20:31.491181 1500
00:20:31.491968 1500
00:20:31.492013 399
00:20:31.492222 399
00:20:31.624795 298
00:20:31.624828 150
00:20:31.634180 798
00:20:31.749103 52
00:20:31.777212 90
00:20:31.869180 212
00:20:31.872662 1500
00:20:31.879724 652
00:20:31.879789 1500
00:20:31.879836 652
00:20:31.879853 186
00:20:31.879867 1500
00:20:31.879882 652
00:20:31.879897 1500
00:20:31.881002 1500
00:20:31.881043 748
00:20:31.883412 1462
00:20:31.883451 1500
00:20:31.885246 652
00:20:31.888708 671
00:20:31.888747 1462
00:20:31.888763 1462
00:20:31.888776 1500
00:20:31.888788 652
00:20:31.954071 1500
00:20:31.954135 1500
00:20:32.010601 1500
00:20:32.010662 1500
00:20:32.015464 1500
00:20:32.015504 1500
00:20:32.025184 1500
00:20:32.025220 757
00:20:32.037594 33
00:20:32.037594 61
00:20:32.037612 33
00:20:32.037612 61
00:20:32.141523 1462
00:20:32.141574 1462
00:20:32.142381 1500
00:20:32.146000 652
00:20:32.146035 824

我必须使用 awk(或 bash 中的其他东西)来计算 avg_time avg_size,计算每个 k 的平均值(k - 可以是一秒、一分钟、30 秒、10 毫秒, 1 分之一秒)。结果文件将包含每个 k 的平均值的行。

我不能跳过时间,即使 k = 30sec 并且没有相应的行,我也必须在结果文件中显示一行,其中 avg_time 和 0 表示 avg_size。将绘制结果。

我该怎么做?非常感谢。 :)

最佳答案

你可以用 awk 做这样的事情:

awk -F"[:. ]" -v k=1 -v d=1000000 '{
timea=$1":"$2":"$3"."$4
time=mktime("2000 00 00 "$1" "$2" "$3)""$4
}
NR==1{
starta=timea
start=time;
a[avg]=$5;
b=1
}
start>(time-(d*k)){
a[avg]+=$5;
b++
enda=timea
}
start<=(time-(d*k)){
print starta"-"enda,a[avg]/b;
starta=timea;
start=time;
b=1;
a[avg]=$5
}
END{
print starta"-"timea,a[avg]/b
}'

文件

使用mktime将时间转换为纪元时间并添加$4。在这里,由于时间以微秒为单位,要获得每一秒的平均值,您需要值 k 作为 1d 作为 1000000(10^6)

一分钟:k=1d=100000(10^4)

30 秒:k=30d=1000000(10^6)或 k=3d=1000000(10^5)

10 毫秒:k=10d=1000000(10^4)等等……

对于您提供的输入,O/P 将是(平均 1 分钟):

00:20:30.812373-00:20:31.777212 443.946
00:20:31.869180-00:20:32.146035 1036.33

O/p 格式:开始时间-结束时间平均值

关于linux - 每 k 秒/毫秒/的平均 tcpdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com