Преобразуйте формат протокола массовой вставки Redis независимо от ОС - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь выполнить массовую вставку Redis с помощью команды cat data.txt | redis-cli --pipe, как указано в https://redis.io/topics/mass-insert.

Формат данных в macOS необходимо преобразовать, чтобы массовая вставка могла быть выполнена с помощью cat ${FILE} | perl -i -p -e 's|[\r\n]+|\r\n|g' | redis-cli --pipe.

Однако приведенная выше команда не работает в среде Linux (или в среде Docker с контейнером, созданным из образа на основе альпийских игр). Вместо этого следующая команда должна выполнить cat ${FILE} | sed 's/\r*$/\r/' | redis-cli --pipe.

Есть ли команда, которая будет работать в обеих средах?

РЕДАКТИРОВАТЬ: Прилагается следующее:

  1. Скрипт Redis Mass Insertion в Alpine Linux: https://gist.github.com/francjohny/f2b13b4cfc147e07e52824ec88ba3781

  2. Сценарий массовой вставки Redis в Mac OS: https://gist.github.com/francjohny/b57756a1e0124dd562959ca5ece2a32b

  3. Файл данных формата протокола Redis: https://gist.github.com/francjohny/0c21f32d9902809b215f4e92f5e6a9f1

  4. ➜ head ouput.rpf| xxd - Mac OS: https://gist.github.com/francjohny/e1a646ab44e7edd7374d28e9ca400711

  5. ➜ head ouput.rpf| xxd - Alpine Linux: https://gist.github.com/francjohny/252904928ded4c045448d12b205228df

1 Ответ

0 голосов
/ 29 апреля 2018

Обновленный ответ

Из данных, которые вы добавили, кажется, что у вас есть только переводы строк, разделяющие ваши строки, тогда как Redis требует возврата каретки с последующим переводом строки. В общем, вам нужен эквивалент программы unix2dos, которая не включена в macOS. Тем не менее, MacOS включает в себя Perl, поэтому вы должны иметь возможность использовать:

perl -pe 's/\n/\r\n/' data.rpf | redis-cli --pipe

Отлично работает на моем Mac.

Оригинальный ответ

У вас, кажется, смешанные окончания строк в различных средах. Я бы предположил, что этот Perl заменит любое количество возвратов каретки и перевода строки в любой смеси одним возвратом каретки и переводом строки, как того требует Redis:

perl -pe 's|[\r\n]*|\r\n|' data.txt | redis-cli ...

Если нет, пожалуйста, ответьте на мой вопрос в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...