Как обновить базу данных mysql из linux с помощью скрипта awk/sed/linux-shell?

У меня есть файл данных с именем «частота.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 будет другим.

0
05.10.2018, 12:30
2 ответа

У меня нет под рукой 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;
0
28.01.2020, 02:42

Вы можете использовать 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))
;
1
28.01.2020, 02:42

Теги

Похожие вопросы