Como fazer sed impressão no final da linha de socat

1

Eu tenho um servidor que envia dados em uma Transmissão UDP na porta 10552. Os dados são 7 números separados por vírgulas dessa forma.

5.351204,0.001968,-0.000473,-0.999222,0.000451,0.001455,1.084310

Eu obtenho esses dados com

socat -u udp-recv:10552,reuseaddr -

Eu quero alterar o formato desses dados, então cano para o sed. Eu não me importo com o primeiro número, então eu removo com

s/[^,]*,//;

Eu adiciono espaços após as vírgulas com

s/,/, /g

Em seguida, adiciono um parêntese aberto ao início de cada linha com

 s/^/(/

Por fim, tento adicionar um parêntese de fechamento ao final de cada linha com

s/$/)/

O comando final acaba sendo

socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;s/$/)/'

Tudo funciona como esperado, exceto que o parêntese de fechamento final acaba no começo de cada linha, então parece

)0.051727, -0.595779, -0.794678, 0.082047, 0.644327, -0.027242

Removendo o último bit do comando para

socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;'

resulta em

(0.079330, -0.608597, -0.786194, 0.092438, 0.657444, -0.031528

Eu tentei substituir anexando o final da linha com awk, tr e também o GNU sed, mas tudo parece transbordar a linha ou algo assim.

Estou no OS X 10.10.3 com o Bash 3.2 embutido. Há mais alguma coisa que eu possa tentar?

    
por user3397903 05.04.2015 / 01:57

2 respostas

1

O socat está retornando dados com \r\n finais de linha. Mudar

s/$/)/

para

s/\r$/)/

Isso pode ou não funcionar com o sed do OSX

    
por 05.04.2015 / 02:25
0

Uma alternativa para remover explicitamente o CR, é informar socat de que as linhas são encerradas pelo CR NL:

 socat -u udp-recv:10552,reuseaddr,crnl - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;s/$/)/'
    
por 05.04.2015 / 15:28