2016-05-10 6 views
0

私はあなたが私を助けてくれることを願っている小さな問題があります。 のは、(tcpdumpをして生成された)次の入力ファイルを見てみましょう:各k秒/ msでの平均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 

私はavg_time avg_sizeを計算するためにはawk(やbashで何か他のもの)を使用する必要があり、平均は、各k(kに対して計算されることは - 秒かもしれません、分、30秒、10ミリ秒、1分の1秒)。結果ファイルには、各kの平均を持つ行が含まれます。

k = 30秒で行がない場合でも、結果ファイルにavg_timeを、avg_sizeに0を指定して行を表示する必要があります。結果がプロットされます。

どうすればいいですか? ありがとうございます。 :)

+1

あなたは私たちに何が表示される場合あなたがそれを修正するのを助けるかもしれません。 http://stackoverflow.com/help/how-to-ask –

+0

を参照して、入力を見て予想される出力を見たり投稿したりするためにスクロールする必要がない例を使用する方法についてはどうですか? –

答えて

0

あなたは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=10000010^4

30秒:k=30d=1000000時間は1秒ごとの平均取得するためにマイクロ秒であるので、ここで あなたが分100000010^6

として1としての価値kdを必要とします(10^6)OR k=3d=100000010^5

10ミリ秒:k=10d=100000010^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フォーマット:starttime-endtime average

関連する問題