На mysqlimport, разрывы строк и кодировки символов (я думаю) - PullRequest
2 голосов
/ 14 мая 2009

Во-первых, некоторые сведения: я не администратор Linux, а мой администратор Linux не программист.

Тем не менее, у нас есть cronjob, который запускает команду mysqlimport для импорта текстового файла, который генерируется ежедневно. У меня нет контроля или участия в создании этого файла. Методом проб и ошибок мы обнаружили, что текстовый файл создается на компьютере с Windows, поэтому для аргумента lines-terminated-by нам пришлось указать \r\n. На прошлой неделе он перестал работать правильно, и мы определили, что это потому, что файл теперь генерируется в Linux, поэтому мы изменили его на \n. Насколько я понимаю (что не совсем ясно), это зависит от того, кто генерирует текстовый файл, который определяет, какая платформа и кодировка используется.

У нас есть сценарий оболочки, который выполняет команду mysqlimport. Когда мы предоставляем правильную кодировку, все работает отлично. Но поскольку мы не знаем, кто будет создавать текстовый файл, существует ли способ определить, что такое кодировка, и реализовать надлежащие символы переноса строки? (И является ли «кодировка» подходящим термином здесь?)

Ответы [ 4 ]

2 голосов
/ 14 мая 2009

Я думаю, что вы можете использовать команды dos2unix или unix2dos в linux для преобразования между кодировкой Windows и Linux. Поэтому вам не нужно определять, какая кодировка используется, просто запустите команду, чтобы убедиться, что файл имеет правильную кодировку.

Это зависит от версии утилиты, но обычно команда будет выполняться так:

dos2unix input.txt output.txt
dos2unix input.txt > output.txt
2 голосов
/ 14 мая 2009

Вам необходимо выполнить команду dos2unix для файла, который читает mysqlimport, перед вызовом mysqlimport. dos2unix преобразует окончания строк Windows "\ r \ n" в окончания строк * nix "\ n", если предоставленный файл был создан в системе * nix, файл остается нетронутым.

Таким образом, вы убедитесь, что у вас всегда будет одинаковый формат окончания строки, передаваемый в ваш скрипт.

С наилучшими пожеланиями

1 голос
/ 14 мая 2009

Вероятно, проще всего использовать tr для удаления лишних \ r из концов строки Windows перед запуском mysqlimport.

1 голос
/ 14 мая 2009

fromdos, dos2unix и tofrodos - три программы, иногда устанавливаемые в системах Linux. Вы можете использовать один из них, чтобы всегда преобразовывать формат в конец строки Unix (\n).

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