태그 보관물: tail

tail

grep에서 awk로 파이핑이 작동하지 않음 tail: $ tail -f

grep진행중인 tail파일 로그를 시도 n하고 줄에서 단어를 얻습니다 . 예제 파일 :

$ cat > test.txt <<EOL
Beam goes blah
John goes hey
Beam goes what?
John goes forget it
Beam goes okay
Beam goes bye
EOL
^C

이제 내가하면 tail:

$ tail -f test.txt
Beam goes blah
John goes hey
Beam goes what?
John goes forget it
Beam goes okay
Beam goes bye
^C

내가 만약 greptail:

$ tail -f test.txt | grep Beam
Beam goes blah
Beam goes what?
Beam goes okay
Beam goes bye
^C

하지만 만약 awkgrep:

$ tail -f test.txt | grep Beam | awk '{print $3}'

아무리 기다려도 아무 문제가 없습니다. 스트림 작동 방식과 관련이 있다고 생각합니다.

누구 단서가 있습니까?



답변

아마도 grep에서 출력 버퍼링 일 것입니다. 으로 비활성화 할 수 있습니다 grep --line-buffered.

그러나 grep의 출력을 awk로 파이프 할 필요는 없습니다. awk는 정규 표현식 패턴 자체를 모두 수행 할 수 있습니다.

tail -f test.txt | awk '/Beam/ {print $3}'


답변

tail -f test.txt | awk '/Beam/{print $3}'나를 위해 작품을 사용 합니다. tail -f test.txt | grep --line-buffered Beam | awk '{print $3}'(gnu grep) 을 사용할뿐만 아니라

여기서 문제 awk는 데이터를 한 줄씩 또는 하나의 더 큰 데이터 블록으로 수신 한 경우 입니다. grep의 GNU 버전은 더 효율적이기 때문에 더 큰 블록으로 출력을 보내지 만, awk한 줄씩 출력하려면 한 줄씩 읽어야합니다.

이 방법을 넣으십시오 : grep버퍼가 채워질 때만 데이터를 보내고 awk는 해당 버퍼가 채워지기를 기다리고 있으므로 아무것도 보내지 않습니다.