Как вы используете mysqlimport для анализа документа, который использует специальные символы в качестве разделителей? - PullRequest
1 голос
/ 28 апреля 2011

Я пробовал:

 mysqlimport --local  --fields-optionally-enclosed-by='\x254' 
             --fields-terminated-by='\x14' testdb  messages.txt 

, а также:

 mysqlimport --local  --fields-optionally-enclosed-by='\xFE' 
             --fields-terminated-by='\cT' testdb  messages.txt 

, и я получаю:

mysqlimport: Ошибка: 1083, полеаргумент-разделитель не то, что ожидается;проверьте руководство, когда используете table: messages.

Я пробовал двойные кавычки, без кавычек, а также одинарные кавычки, как указано выше.Кто-нибудь знает, какой должен быть правильный синтаксис?

1 Ответ

2 голосов
/ 21 января 2012

Согласно документации (http://dev.mysql.com/doc/refman/5.0/en/load-data.html), только некоторые escape-последовательности доступны с mysqlimport, это:

Character   Escape Sequence
\0  An ASCII NUL (0x00) character
\b  A backspace character
\n  A newline (linefeed) character
\r  A carriage return character
\t  A tab character.
\Z  ASCII 26 (Control+Z)
\N  NULL

Поэтому, если вы получили необычные окончания строк (например, \ x02 \ n "), у вас нет другого выбора, кроме предварительного форматирования файла. К счастью, это довольно легко с небольшим количеством седа. Например, со строкой, заканчивающейся «\ x02 \ n» и заканчивающейся полем «\ x01», вы можете использовать следующий скрипт bash:

#!/bin/sh
FILE="$1.tmp"

# Copying
cp $1 $FILE
# Removing comments from file
sed -i '/^#/d' $FILE
# Replacing field separator
sed -i 's/\x01/\x00%/g' $FILE
# Replacing lineends
sed -i ':a;N;$!ba;s/\x02\n/\x00\n/g' $FILE

Затем выстрелил в следующий mysqlimport

mysqlimport --fields-terminated-by="\0%" --lines-terminated-by="\0\n" [...] $FILE

Будет хорошо работать.

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