Невозможно перенаправить вывод 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;} '

Если вы дадите ему какое-то время, вы увидите, что он начнет печатать строки с данными в байтах (думаю, stdout) ..

Я много пробовал, пытаясь записать эти строки в файл включая несколько вариантов 1>,>, >>, tee и др .. Ничего подобного eems для работы при перенаправлении вывода из awk.

0
задан 3 June 2019 в 16:45
2 ответа

Смешивание перенаправлений с 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
0
ответ дан 23 November 2019 в 23:36

Ваша проблема в том, что если 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 () приведет к немедленной печати всех строк, что менее эффективно, но позволяет увидеть это немедленно.)

0
ответ дан 23 November 2019 в 23:36

Теги

Похожие вопросы