Как мне обновить столбец таблицы MySQL несколькими строковыми значениями, где имя файла - это идентификатор? - PullRequest
0 голосов
/ 25 октября 2011

У меня есть несколько сотен файлов в каталоге.Я называю это /tmp/testfiles/

Файлы в каталоге /tmp/testfiles/ содержат несколько строк текста.например, как правило, кошка filename.txt приведет к

Шаг 1) Найдите это там

Шаг 2) Если вы не можете найти его там, попробуйте и посмотрите где-то там

бла бла бла

еще немного бла бла бла


Имена файлов - это идентификаторы этих файлов.например, если имя файла равно 1000.txt, то 1000 является идентификатором ссылки.

Так что я надеюсь вывести содержимое этих файлов в столбец уже существующей таблицы, где имя файла - это номер идентификатора.

Пока что здесь у меня есть

1) используйте sed для вставки / n на каждом конце строки, а затем используйте tr для удаления строк

for file in `find *txt | cut -d "." -f1`
do
  sed -e 's/$/\\n/' ${file}.txt > ${file}.tmp; cat ${file}.tmp | tr '\n' ' ' > ${file}.txt; \rm ${file}.tmp;sleep 2
done

2) используйте sed для добавления $ filename;в начале каждой строки файлов

for file in `find *txt | cut -d "." -f1`
do
  sed -e 's/^/'${file}';"/' -e 's/$/"/' ${file}.txt > ${file}.tmp; \mv ${file}.tmp ${file}.txt;sleep 2
done

Если вы читаете это далеко, в двух словах ... Я пытаюсь вывести все файлы в каталоге в CSV.Который затем я могу сделать загрузку INFILE для моей таблицы MySQL.

, поэтому у меня есть что-то вроде этого

filename1; "Step 1) Go find this there /n /n Step 2) If you cant find it there, try and take a look somewhere over there /n /n bla bla bla"
filename2; "Step 1) a second line for example purposes /n /n Step 2) i reckon a third line is not needed /n /n bla bla bla"

Так вот мой вопрос (ы)

  1. Как я могу использовать LOAD INFILE, чтобы обновить столбец существующего только когда id = имя файла?
  2. Есть ли другие способы передачи данных в MySQL?

1 Ответ

2 голосов
/ 25 октября 2011

Мне кажется, что с новыми строками что-то странное.

Я бы сделал это так:

  • Учтите, что вы можете преобразовать файл в его шестнадцатеричное представлениес

    df | od -tx1 | cut -c9- | tr -d ' ' | tr -d '\n'
    
  • Используйте это, чтобы поместить результат в сценарий построения запроса:

    echo "INSERT INTO table (id, data) VALUES "
    comma=''
    for f in *.txt; do
        id="${f%.txt}"
        data=$(od <"$f" -tx1 | cut -c9- | tr -d ' ' | tr -d '\n')            
        printf "%s('%s', 0x%s)" "$comma" "$id" "$data"
        comma=','
    done;
    echo ';'
    
  • Передать вывод сценарияв mysql CLI.

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