2011-08-06 7 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)}' 

는 더 간단 버전입니다.

+0

Linux의 OS/버전을 알려주십시오. 또한 시스템에'unbuffer'가 있다면, 그것을 믹스에 추가하십시오. 예쁜 해결책은 아니지만, 필요한 경우 작동시킬 수 있습니다. 행운을 빕니다. – shellter

+0

우분투 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를 사용하라고 제안하지만 나에게도 도움이되지 않습니다.

명령에 동일한 문제가 있습니다.

내 솔루션은 : 제 경우에는 그냥 GREP에 --line 버퍼 및 awk 명령에 접촉하지 넣어 필요하지만 경우에 나는 시도 할 것이다 : 적절한 정규 표현식과

sed -u 

합니다. 예를 들어 :

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

이 표현은 당신에게 3를 제공하고 4 열은 TAB (Ctrl + V를하고 TAB 조합 작성)로 구분합니다. -u 옵션을 사용하면 버퍼링되지 않은 출력을 얻을 수 있으며 라인 버퍼링 된 출력을 제공하는 -l 옵션이 있습니다.

이 답변을 유용하다고 생각합니다. 늦었지만

관련 문제