Grep
如何使用 iperf 輸出而僅使用 grep 間隔和頻寬?
我正在嘗試從命令中獲取輸出
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}'
請注意,此選項已添加到
iperf3
version3.1.5
。