Если мы собираемся вызвать MySQL, чтобы вставить тонны строк в таблицу ... предполагая, что "случайный" характер random1, random2, random3 исключает буквальный символ табуляции 0x09
, '\t'
...
Я бы не стал заниматься парсингом файла в bash, это много накладных расходов. Я бы просто запустил клиент mysql, выполнил оператор MySQL LOAD DATA
и позволил MySQL прочитать файл и разобрать его.
, например
при условии, что мы хотим вставить строки в mytable
столбцы col1
и col2
, что-то вроде этого:
LOAD DATA LOCAL INFILE '/tmp/foo.txt'
INTO mytable
( @foo
)
SET col1 = SUBSTRING_INDEX(@foo,':',1)
, col2 = IF(LOCATE(':',@foo)>0,SUBSTRING(@foo,LOCATE(':',@foo)+1,10000),'')
Ссылка: https://dev.mysql.com/doc/refman/8.0/en/load-data.html
В качестве демонстрации выражений, используемых в операторе LOAD DATA:
SELECT t.foo
, SUBSTRING_INDEX(t.foo,':',1) AS foo1
, IF(LOCATE(':',t.foo)>0,SUBSTRING(t.foo,LOCATE(':',t.foo)+1,10000),'') AS foo2
FROM ( SELECT 'a' AS foo
UNION ALL SELECT ':b'
UNION ALL SELECT '::c'
UNION ALL SELECT ':::d'
UNION ALL SELECT 'a:b'
UNION ALL SELECT 'a:::d'
UNION ALL SELECT 'a:b:c'
UNION ALL SELECT 'a:b:c::e'
) t
возвращает
foo foo1 foo2
-------- ---- -------
a a
:b b
::c :c
:::d ::d
a:b a b
a:::d a ::d
a:b:c a b:c
a:b:c::e a b:c::e