socat e gawk canalizados

1

Estou tentando manipular um fluxo TCP usando o gawk. O servidor TCP transmite uma cadeia de texto separada por espaços em branco. Eu quero adicionar uma seqüência extra no início e, em seguida, separar os campos restantes com vírgulas em vez de espaços em branco. Eu tentei como abaixo:

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}'

que está funcionando. Mas agora eu quero redirecionar esse fluxo para fora em um segundo soquete como abaixo:

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

Mas nada em 127.0.0.1:9999 Eu tentei ouvir com:

socat tcp-listen: 9999, reuseaddr, ignoreeof, stdout do garfo

mas nada.

Eu fiz outro teste:

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 - -

mas novamente nada na minha stdout.

Você pode me ajudar?

    
por dzuliani 13.04.2018 / 11:20

1 resposta

0

É provável que a saída de gawk seja armazenada em buffer quando sua saída for para um canal e que não haja saída suficiente gerada para liberar o buffer.

Para limpar o buffer de saída manualmente, use fflush() no programa gawk :

gawk '{ ... ; print out; fflush() }'
    
por 13.04.2018 / 11:36

Tags