Я создал небольшую симпатичную команду для измерения потребления полосы пропускания данных по измеренному соединению (исключая локальный трафик):
sudo iftop -i enp1s0 -f ' not (src net (10 или 172.16 / 12 или 192.168 / 16) и dst net (10 или 172.16 / 12 или 192.168 / 16)) '-t -L1 2> / dev / null | awk' $ 1 == "Накопительный" {print $ 5;} '
Если вы дадите ему какое-то время, вы увидите, что он начнет печатать строки с данными в байтах (думаю, stdout) ..
Я много пробовал, пытаясь записать эти строки в файл включая несколько вариантов 1>,>, >>, tee и др .. Ничего подобного eems для работы при перенаправлении вывода из awk.
Смешивание перенаправлений с sudo может сбивать с толку. Я бы запустил конвейер в новой оболочке, и перенаправление могло бы пойти туда:
sudo sh <<'END_IFTOP'
filter="not (src net (10 or 172.16/12 or 192.168/16) and dst net (10 or 172.16/12 or 192.168/16))"
iftop -i enp1s0 -f "$filter" -t -L1 2> /dev/null |
awk '$1 == "Cumulative" {print $5}' > $HOME/output.file
END_IFTOP
Ваша проблема в том, что если awk обнаруживает, что его вывод не является терминалом, он переключается на буферизованный вывод; вам просто нужно подождать, пока не появится какой-либо вывод.
Если вы не хотите ждать, используйте:
sudo iftop -i enp1s0 -f 'not (src net (10 или 172.16 / 12 или 192.168 / 16) и dst net (10 или 172.16 / 12 или 192.168 / 16)) '-t -L1 2> / dev / null | awk '$ 1 == "Накопительный" {print $ 5; fflush (); } '
( fflush ()
приведет к немедленной печати всех строк, что менее эффективно, но позволяет увидеть это немедленно.)