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
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?
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/$/)/'