2011-08-06 5 views
1

tsharkの出力をawkにパイプしようとしています。 tsharkコマンドはそれ自身で正常に動作し、catのような他のプログラムにパイプすると、正常に動作します(出力のリアルタイム印刷)。しかし、awkにパイプすると、ハングアップして何も起こりません。awkへの配管が掛かります

sudo tshark -i eth0 -f "tcp" -R 'http.request.method=="GET"' | awk '{print $0}' 

と比較するために、細かい以下の作品は(が、非常に便利ではありません):事前に

sudo tshark -i eth0 -f "tcp" -R 'http.request.method=="GET"' | cat 

おかげでここ

sudo tshark -i eth0 -l -f "tcp" -R 'http.request.method=="GET"' -T fields -e ip.src -e ip.dst -e 
tcp.srcport -e tcp.dstport -e tcp.seq -e tcp.ack | awk '{printf("mz -A %s -B %s -tcp \"s=%s sp=%s 
dp=%s\"\n", $2, $1, $5, $4, $3)}' 

はsimplierバージョンです。

+0

LinuxのOS /バージョンはどうしたらよいですか。また、システムに 'unbuffer'がある場合は、それをミックスに追加してみてください。かなりの解決策ではありませんが、それが必要な場合は、それが可能です。がんばろう。 – shellter

+0

Ubuntu 11.04を使用しています。私はバッファーなしで行ったが、運がない - それはちょうどハングアップする。 – Kevin

+0

あなたの質問は十分に文書化されています。しかし、 'cat'を使った最後の例がtsharkへのオプション、すなわち '-T fields ...'が使われているときにも動作すると仮定するのは安全でしょうか? awkは出力を処理する上で問題にならないはずです。また、 'sudo'を写真から取り除くとどうなりますか?がんばろう。 – shellter

答えて

2

コメント内のこれまでのメッセージでは、強制的に入力を閉じて改行を送信するように機能するかもしれません。

sudo tshark -i eth0 -f "tcp" -R 'http.request.method=="GET"' ...... \ 
| { 
    awk '{print $0}' 
    printf "\n" 
    } 

注:awkとprintfの間のパイプはありません。

こちらがお役に立てば幸いです。

+0

これにより、応答時間が大幅に増加しました。しかしそれはまだ瞬間ではありませんが、それは変です。 awk以外のものを試してみます。ご協力いただきありがとうございます。 – Kevin

+0

'printf'は必要ないかもしれませんが、{...}ラッパーは残しておいてください。がんばろう。 – shellter

4

私は同じ問題がありました。

完全に移植可能ではない部分的な「解決策」が見つかりました。 それらのいくつかは、私は両方を試してみましたが、どれも働かない

http://mywiki.wooledge.org/BashFAQ/009

にfflush()またはフラッシュ()awkの機能または-Wインタラクティブなオプションを使用することを指します。 awkは適切なコマンドではありません。

gawkを使用することを示唆しているものは少なくありませんが、それはどちらも私のためのトリックではありません。

cutコマンドにも同じ問題があります。

私の解決策:私の場合、私はちょうどawkコマンドを触れGREPで--line-バッファリングを入れていないのに必要はなく、あなたのケースで私がしようとするだろう:

sed -u 

適切な正規表現で。たとえば:

sed -u 's_\(.*\)  \(.*\) \(.*\) DIFF: \(.*\)_\3 \4_' 

この式は、あなたの第三を与え、第四列は(Ctrl + VとTABの組み合わせで書かれた)TABで区切ります。 -uオプションを使用するとバッファリングされていない出力が得られます。また、-lオプションを使用すると、出力をバッファリングすることができます。

この回答は役に立ちましたか?遅くとも

関連する問題