Назад | Перейти на главную страницу

Как я могу использовать вывод iperf и только grep Interval и Bandwidth?

Я пытаюсь получить вывод команды

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 output, вы просто напечатаете поля 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 версия 3.1.5.