TCP 스트림을 조작하기 위해 gawk를 사용하려고 합니다. TCP 서버는 공백으로 구분된 텍스트 문자열을 출력합니다. 처음에 추가 문자열을 추가한 다음 나머지 필드를 공백 대신 쉼표로 구분하고 싶습니다. 나는 다음을 시도했습니다 :
socat TCP4:127.0.0.1:8888 - | gawk '{out=""; for(i=1;i<=NF;i++){if (i > 1) {out=out","$i} else out="Hello,"$i}; print out}'
이것은 작동합니다. 하지만 이제 다음과 같이 해당 스트림을 두 번째 소켓으로 리디렉션하고 싶습니다.
socat TCP4:127.0.0.1:5754 PIPE gawk '{out=""; for(i=1;i<=NF;i++){if (i > 1) {out=out","$i} else out="$LZER0,POS,"$i}; print out}' | socat - TCP:127.0.0.1:9999
하지만 127.0.0.1:9999에는 아무것도 없습니다. 다음과 같이 들어보았습니다.
socat tcp-listen:9999,reuseaddr,ignoreeof,fork stdout
하지만 아무것도 아니야.
나는 또 다른 테스트를 수행했습니다.
socat TCP4:127.0.0.1:5754 PIPE gawk '{out=""; for(i=1;i<=NF;i++){if (i > 1) {out=out","$i} else out="$LZER0,POS,"$i}; print out}' | socat - -
하지만 내 표준 출력에는 아무것도 없습니다.
도와주세요?
답변1
gawk
출력이 파이프로 들어가고 버퍼를 플러시할 만큼 충분한 출력이 생성되지 않으면 출력이 버퍼링될 가능성이 높습니다.
출력 버퍼를 수동으로 플러시하려면 프로그램 fflush()
에서 다음을 사용하십시오.gawk
gawk '{ ... ; print out; fflush() }'