awkコマンド
awk(おーく)コマンドについて
ns2やns3を使用していると、トレースファイルから必要な情報を取り出したい場面が出てきます。
そんなとき便利なコマンドがawkです。awkは、入力データ1行ごとに各列の様々な処理を行うコマンドです。
使い方
awk '条件文{実行文}' 入力ファイル
実際に使ってみる
上図は、ノード0とノード1がノード2を経由してノード3へUDPでパケットを送信している様子です。
以下のようなns2のトレースファイル(out.tr)に対してawkコマンドを使ってみます。
目標は、「ノード3がパケットを受信する時間と、パケットサイズをトレースファイルから取り出すこと」です。
... + 1.01 1 2 cbr 500 ------- 2 1.0 3.0 2 104 - 1.01 1 2 cbr 500 ------- 2 1.0 3.0 2 104 + 1.01 0 2 cbr 500 ------- 1 0.0 3.0 102 105 - 1.01 0 2 cbr 500 ------- 1 0.0 3.0 102 105 r 1.013 2 3 cbr 500 ------- 1 0.0 3.0 97 97 r 1.014 1 2 cbr 500 ------- 2 1.0 3.0 0 100 + 1.014 2 3 cbr 500 ------- 2 1.0 3.0 0 100 - 1.014 2 3 cbr 500 ------- 2 1.0 3.0 0 100 r 1.014 0 2 cbr 500 ------- 1 0.0 3.0 100 101 + 1.014 2 3 cbr 500 ------- 1 0.0 3.0 100 101 + 1.015 1 2 cbr 500 ------- 2 1.0 3.0 3 106 - 1.015 1 2 cbr 500 ------- 2 1.0 3.0 3 106 + 1.015 0 2 cbr 500 ------- 1 0.0 3.0 103 107 - 1.015 0 2 cbr 500 ------- 1 0.0 3.0 103 107 - 1.018 2 3 cbr 500 ------- 1 0.0 3.0 100 101 r 1.018 2 3 cbr 500 ------- 1 0.0 3.0 98 98 r 1.019 1 2 cbr 500 ------- 2 1.0 3.0 1 102 + 1.019 2 3 cbr 500 ------- 2 1.0 3.0 1 102 r 1.019 0 2 cbr 500 ------- 1 0.0 3.0 101 103 + 1.019 2 3 cbr 500 ------- 1 0.0 3.0 101 103 + 1.02 1 2 cbr 500 ------- 2 1.0 3.0 4 108 - 1.02 1 2 cbr 500 ------- 2 1.0 3.0 4 108 ...
行の1列目に注目してみると、r,+,-の3つが見られます。それぞれの意味は以下のとおりです。
-
- 'r' 受信(receive)
- '+' エンキュー
- '-' デキュー
また、トレースファイル(out.tr)の2列目は、時間を表してます。3列目と4列目では、パケットの送信元ノードとパケットの送信先ノードをそれぞれ示しています。5行目はCBR(Constant Bit Rate)を示し、6行目はパケットサイズを示しています。
したがって、まず1列目が'r'であり、かつ4列目が'3'であるような行を選択すればいいことがわかります。
これをawkコマンドを使って表現すると、
awk '{if($1 == "r" && $4 =="3") print $2,$6}' out.tr
上記コマンドは、トレースファイル(out.tr)から1列目($1)が'r'であり、かつ4列目($4)が'3'である行から、2列目(時間)と6列目(パケットサイズ)を出力するコマンドです。
※print $○,$○,...,$○という感じで','(カンマ)で各要素を区切らなければ、syntax errorとなります。
出力結果は以下のようになりました。
... 1.013 500 1.018 500 1.023 500 1.028 500 1.032 500 1.036 500 1.04 500 1.044 500 1.048 500 1.052 500 1.056 500 1.06 500 ...
このawkコマンドを使用することで、gnuplotで図を表示してみたり、スループットを求めてみたりなど多くのことに役立てることができます。
以上、ns2の有線ネットワークのトレースファイルからパケットサイズの情報を取り出してみましたが、トレースファイルの形式が異なる無線ネットワークのトレースファイルも同様にして扱うことができます。