Grep

如何使用 iperf 輸出而僅使用 grep 間隔和頻寬?

  • June 4, 2018

我正在嘗試從命令中獲取輸出

iperf -c 10.0.0.1 -t 3600 -i 2  

並且只需要為整個記錄小時列出的間隔和頻寬欄位。

多年來,我沒有使用過 grep 或 awk 。

幫助會很棒!

樣本輸出:

------------------------------------------------------------
Client connecting to node2, TCP port 5001
TCP window size:  129 KByte (WARNING: requested  130 KByte)
------------------------------------------------------------
[  3] local <IP Addr node1> port 2530 connected with <IP Addr node2> port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  19.7 MBytes  15.8 Mbits/sec

期望的輸出:

0.0-10.0 15.8

僅根據您發布的iperf輸出,您只需從最後一行列印欄位 3 和 4:

| awk 'END{print $3" "$7}'

這個問題不僅僅是關於awk.

問題: 讓我們首先解釋一下你的iperf命令做了什麼,以幫助那些不熟悉它的人。

  • -c 10.0.0.1連接到在地址處偵聽的伺服器10.0.0.1
  • -t 3600持續執行3600幾秒鐘,即 1 小時
  • -i 2``2每秒鐘列印一份報告

在接下來的一個小時內,每兩秒就會在螢幕上列印(添加)這樣一行:

[  3]  0.0-10.0 sec  19.7 MBytes  15.8 Mbits/sec

您想要的是將每兩秒列印在螢幕上的資訊減少為以下形式的行:

0.0-10.0 15.8

**答案:**要獲得此資訊,請將輸出通過管道傳輸到awk

iperf -c 10.0.0.1 -t 3600 -i 2 | awk '/[0-9]]/{sub(/.*]/,"");print $1" "$5}'

如果您使用iperf的是 iperf 2,則可以在此處停止閱讀。


如果您使用**iperf3,您現在應該已經發現管道輸出被緩衝了。這意味著您不會**每兩秒在螢幕上看到新的一行!相反,每 50 秒左右會列印一大堆行,具體取決於系統。請注意,iperf 2 不會發生這種情況,因為它會在列印每一行後刷新輸出。

要以所需的間隔在螢幕上列印所需形式的行,您需要**--forceflush**:

   --forceflush
          force flushing output at every interval.  Used to avoid  buffer-
          ing when sending output to pipe.

回答:

iperf3 -c 10.0.0.1 -t 3600 -i 2 --forceflush | awk '/[0-9]]/{sub(/.*]/,"");print}'

請注意,此選項已添加到iperf3version 3.1.5

引用自:https://serverfault.com/questions/911672