У меня есть файл данных с именем «частота.txt» в двух столбцах, столбец 1 — «частота», это число, показывающее повторение соответствующего столбца 2, который имеет идентификаторы.
Пример:-
Данные
частота, идентификатор
32 329
312 330
320 331
132 332
232 334
52 336
42 337
82 338
.. ...
Приведенные выше данные должны быть обновлены в столбце базы данных mysql. Здесь более 100 строк, и каждый день я должен их обновлять. Сейчас я использую эту команду для обновления вручную.
echo 'обновить table.id_set, установить 'частоту' = 32, где
id=329; '|mysql -B -u username -p -h database.com
Как написать сценарий оболочки, который автоматически заменит значения «частоты» и «идентификатора» в приведенной выше команде эха и запустит его для всех существующих строк в Frequency.txt
PS: - Количество строк в Frequency.txt будет другим.
У меня нет под рукой mysql
для тестирования, но может ли он принимать несколько операторов SQL:
awk '{print "update table.id_set set frequency = "$1" where id = "$2";"}' < input |
mysql -B -u username -p -h database.com
При вводе примера команда awk отправит это команде mysql
:
update table.id_set set frequency = 32 where id = 329;
update table.id_set set frequency = 312 where id = 330;
update table.id_set set frequency = 320 where id = 331;
update table.id_set set frequency = 132 where id = 332;
update table.id_set set frequency = 232 where id = 334;
update table.id_set set frequency = 52 where id = 336;
update table.id_set set frequency = 42 where id = 337;
update table.id_set set frequency = 82 where id = 338;
Вы можете использовать mysqlimport или вызвать напрямую LOAD DATA INFILE оператор sql (через mysql ).
mysqlimport не любит файлы данных "фиксированной -ширины", но вы можете увидеть Загрузка фиксированной -ширины, файла.txt с разделителями-пробелами в mySQL для примера того, как с ними обращаться.
Этот пример основан на предположении , что столбец id
является первичным ключом таблицы id_set
.
LOAD DATA LOCAL INFILE '/some/path/data.txt'
REPLACE INTO TABLE id_set
(@row)
SET frequency = TRIM(SUBSTR(@row,1,7)),
id = TRIM(SUBSTR(@row,8,50))
;