1

У меня есть сервер, который отправляет данные в UDP Broadcast на порт 10552. Данные состоят из 7 цифр, разделенных запятыми.

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

Я получаю эти данные с

socat -u udp-recv:10552,reuseaddr -

Я хочу изменить формат этих данных, поэтому я передаю их в sed. Мне плевать на первый номер, поэтому я удаляю его

s/[^,]*,//;

Я добавляю пробелы после запятых

s/,/, /g

Затем я добавляю открытую скобку в начало каждой строки

 s/^/(/

Наконец, я пытаюсь добавить закрывающую скобку в конец каждой строки

s/$/)/

Последняя команда заканчивается

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

Все работает, как и ожидалось, за исключением заключительной закрывающей скобки в конце каждой строки, поэтому выглядит

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

Удаление последнего бита команды для

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

результаты в

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

Я попытался заменить добавление конца строки на awk, tr, а также GNU sed, но кажется, что все переполняет строку или что-то в этом роде.

Я на OS X 10.10.3 со встроенным Bash 3.2. Есть ли что-нибудь еще, что я могу попробовать?

2 ответа2

1

socat возвращает данные с \r\n окончаниями строк. + Изменить

s/$/)/

в

s/\r$/)/

Это может или не может работать с OSX Sed

0

Альтернатива явному удалению CR состоит в том, чтобы сообщить socat что строки CR завершены NL:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .