2013-06-30 4 views
0

В bash обычно вы не можете отправить вывод tcpdump в выражение awk, как описано в this Stack Exchange question. Это ничего не печатает:Проводка вывода tcpdump несколько раз

sudo tcpdump -i en1 -n -q 'tcp[13]=18 and src port 80' | awk '{$0=$3; sub(".80$",""); print $0}' 

Решение в буфер вывода с -l флагом, как это, который работает, как ожидалось:

sudo tcpdump -i en1 -n -q -l 'tcp[13]=18 and src port 80' | awk '{$0=$3; sub(".80$",""); print $0}' 

Однако, когда я попытался трубы на выходе из awk в файл или где-либо еще, файл создается, но остается пустым, даже если tcpdump говорит, что он получил пакеты.

sudo tcpdump -i en1 -n -q -l 'tcp[13]=18 and src port 80' | awk '{$0=$3; sub(".80$",""); print $0}' | tee -a file.txt 

или

sudo tcpdump -i en1 -n -q -l 'tcp[13]=18 and src port 80' | awk '{$0=$3; sub(".80$",""); print $0}' | awk '{print $3}' >> file.txt 

Мой обходной путь был для вывода в файл, а затем запустить AWK на файл позже, экспорт в другой файл, но это делает его невозможно прочитать отредактированный файл в настоящее время. Любые идеи о том, почему это происходит?

+0

'awk' также буферизует свой вывод (большинство программ вывода буфера, когда они пишут в файл или трубу, потому что это поведение по умолчанию стандартного вывода). К сожалению, у него нет такой опции, как 'tcpdump -l', чтобы он не буферизировал. – Barmar

+0

Я упростил фрагменты кода, чтобы упростить их чтение, и теперь первый работает, но мой оригинал все еще не работает. Изменение фрагментов кода сейчас. – shardbearer

+0

Фрагменты кода не имеют большого значения, решение одинаково независимо от того, что вы делаете. Вам просто нужно очистить после печати. – Barmar

ответ

2

awk имеет fflush функцию, которая посылает выходной буфер:

sudo tcpdump -i eth0 -q -l | awk '{print $3; fflush}' | tee -a file.txt 
+0

Спасибо, что сработало отлично! – shardbearer

+0

Только 'gawk' и' BSD awk' имеют 'fflush()' ,. 'mawk' имеет' -w interactive'. Другие awks могут использовать операции повторного закрытия и добавления. – Scrutinizer

Смежные вопросы