Вопрос или проблема
Я пытаюсь мониторить, сколько полосы пропускания используется Transmission во время скачивания торрентов. Я нашел утилиту nethogs. Если я запускаю
sudo nethogs -t | grep transmission-gtk
я получаю
transmission-gtk/2766/1001 0.145703 2.56738
transmission-gtk/2766/1001 0.606641 11.9141
transmission-gtk/2766/1001 1.06953 20.6506
transmission-gtk/2766/1001 1.87441 35.0754
transmission-gtk/2766/1001 2.63965 49.8998
transmission-gtk/2766/1001 2.76406 51.4779
transmission-gtk/2766/1001 3.49121 62.7377
transmission-gtk/2766/1001 4.2791 79.4397
transmission-gtk/2766/1001 4.69922 86.7502
transmission-gtk/2766/1001 5.57695 104.648
transmission-gtk/2766/1001 5.58379 111.542
transmission-gtk/2766/1001 5.54961 109.8
transmission-gtk/2766/1001 5.55586 109.565
transmission-gtk/2766/1001 5.58281 106.428
transmission-gtk/2766/1001 5.90234 107.965
transmission-gtk/2766/1001 5.66777 101.533
transmission-gtk/2766/1001 5.52168 93.8941
transmission-gtk/2766/1001 5.20098 88.0832
transmission-gtk/2766/1001 4.57051 80.6463
transmission-gtk/2766/1001 4.23613 77.7107
transmission-gtk/2766/1001 4.10391 78.3896
transmission-gtk/2766/1001 3.96484 78.1943
transmission-gtk/2766/1001 4.09473 76.99
transmission-gtk/2766/1001 4.41582 79.4229
transmission-gtk/2766/1001 4.73984 83.9588
transmission-gtk/2766/1001 5.88789 100.991
transmission-gtk/2766/1001 5.10801 80.4992
transmission-gtk/2766/1001 5.22676 80.5789
transmission-gtk/2766/1001 5.1707 76.5184
transmission-gtk/2766/1001 5.37773 80.1029
transmission-gtk/2766/1001 5.7707 85.7389
transmission-gtk/2766/1001 7.11309 103.625
transmission-gtk/2766/1001 6.13027 88.0092
transmission-gtk/2766/1001 5.64004 84.7049
transmission-gtk/2766/1001 5.08203 81.7949
transmission-gtk/2766/1001 4.58223 80.7449
transmission-gtk/2766/1001 5.42402 100.62
transmission-gtk/2766/1001 4.66973 87.1572
transmission-gtk/2766/1001 5.11504 90.9414
transmission-gtk/2766/1001 5.67402 97.6721
transmission-gtk/2766/1001 6.14375 97.0371
transmission-gtk/2766/1001 5.71191 92.018
transmission-gtk/2766/1001 6.82676 111.715
transmission-gtk/2766/1001 6.61562 109.056
transmission-gtk/2766/1001 4.80723 82.7264
transmission-gtk/2766/1001 4.71523 83.9014
transmission-gtk/2766/1001 4.3041 80.1188
transmission-gtk/2766/1001 4.04277 81.1988
Однако, когда я запускаю
sudo nethogs -t | grep transmission-gtk | awk '{ print $2+$3; }'
изредка он начинает выдавать результат, но чаще всего нет никакого вывода. Что не так или что мне делать?
Я попытался поискать в интернете, и все говорят, что это будет работать. Я пробовал несколько вариантов awk, добавлял -e и { print ($1+$2); }, но это все равно не работает. Я запускал обе команды одновременно, но команда с awk не стабильна, а команда без него всегда работает.
Ответ или решение
Для того чтобы правильно использовать утилиты командной строки, такие как nethogs
и awk
, необходимо учитывать особенности работы с потоками данных и синхронизацией команд. Ваш вопрос касается проблем с выводом суммы двух столбцов при использовании awk
в сочетании с grep
, и я помогу вам разобраться в этой ситуации.
Во-первых, давайте рассмотрим вашу команду:
sudo nethogs -t | grep transmission-gtk | awk '{ print $2+$3; }'
Эта команда должна по идее работать, но существуют некоторые нюансы, которые могут влиять на стабильность её выполнения.
Возможные причины нестабильного результата
-
Формат данных: Убедитесь, что данные действительно содержат необходимые поля. Если в каком-то из выводов
nethogs
не будет значений во втором или третьем столбцах (например, значения могут отсутствовать из-за ошибок в самомnethogs
, отсутствия передачи данных и т. д.), тоawk
не сможет выполнить операцию сложения и вернет пустую строку. -
Синхронизация потоков:
nethogs
выводит данные в реальном времени. Еслиgrep
илиawk
временно не успевают обработать строку, она может быть потеряна, особенно если выходной поток данных слишком быстро обновляется. -
Пробелы и разделители: Убедитесь, что вывод
nethogs
формируется с ожидаемым количеством пробелов или табуляций между колонками. Это особенно важно, если вывод может меняться.
Рекомендации по решению проблемы
-
Добавление отладки: Чтобы увидеть, что именно передается в
awk
, вы можете временно добавить вывод строки в запущенную команду:sudo nethogs -t | grep transmission-gtk | awk '{ print $0; print $2+$3; }'
Это покажет строки, которые обрабатываются
awk
, и поможет понять, почему они не выводят ожидаемое значение. -
Фильтрация данных: Используйте
awk
как основной инструмент фильтрации и обработки данных, а неgrep
. Например, вы можете использоватьawk
для выборки только нужных строк с начальной фильтрацией:sudo nethogs -t | awk '/transmission-gtk/ { print $2 + $3; }'
Это может повысить скорость обработки и уменьшить вероятность пропуска строк.
-
Периодическое выполнение: Для стабильности вывода рассмотрите возможность применения утилиты
watch
для периодического выполнения команды, например:watch -n 1 "sudo nethogs -t | awk '/transmission-gtk/ { print \$2 + \$3; }'"
Это будет запускать команду каждую секунду и отображать результаты в терминале.
-
Создание скрипта: Если ваши требования становятся более сложными, рассмотрите создание bash-скрипта для обработки данных, что позволит более гибко контролировать, как данные обрабатываются и выводятся.
В результате, правильная организация работы с командами, использование возможностей awk
для фильтрации и обработка данных, а также добавление отладочных инструментов помогут вам добиться стабильных и ожидаемых результатов при мониторинге использования полосы пропускания во время передачи данных через transmission-gtk
.