想在具有两列的mysql表中插入一个txt文件,其中包含以下结构的大量行:
def isPrimeUntil(t: Int): Boolean = t == 1 || t > 1 && n%t != 0 && isPrimeUntil(t-1)
定界符为“:”
“随机”代表一组随机字符。
第一列应为字符串random1
应在第二列中存储其余字符串random2:random3:random4:randomN
要提取第一列的子字符串,已经尝试过:
random1:random2:random3:random4
random1:random2:random3:random4:random5
random1:random2
random1:random2:random3:random4:randomN
...
如何从第一个定界符“:”提取子字符串直到行的末尾并将其存储在mysql表中?
提前谢谢!
答案 0 :(得分:3)
(可能)这是您解决方案的一部分:
while IFS=: read -r first rest; do
do_something_with "$first" "$rest"
done < colon-separated-file.txt
答案 1 :(得分:1)
这会将第一个“:”更改为“,”以制作CSV文件:
sed -E "s/([^:]*):/\1,/" myfile.txt > myfile.csv
然后您可以将其导入到表中。
或者,您可以创建一个SQL脚本:
sed -E "s/([^:]*):(.*)/insert into mytable (col1, col2) values ('\1','\2');/" myfile.txt > myfile.sql
然后运行它:
mysql -u root mydatabase -s < myfile.sql
答案 2 :(得分:0)
在MySQL中,您可以按照以下步骤用:
分隔符分割字符串:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(mycolumn, ':', 1), ':', -1) as random1,
SUBSTRING_INDEX(SUBSTRING_INDEX(mycolumn, ':', 2), ':', -1) as random1,
...
SUBSTRING_INDEX(SUBSTRING_INDEX(mycolumn, ':', N), ':', -1) as random1,
FROM myTable;
请注意,此技术要求您事先知道字符串中的最大部分数。
答案 3 :(得分:0)
如果我们要调用MySQL将大量行插入到表中...假设random1,random2具有“随机”性质,random3会排除文字制表符0x09
,'\t'
。 ..
我不会用bash解析文件,这会产生很多开销。我只执行mysql客户端,然后发出MySQL LOAD DATA
语句,然后让MySQL读取并解析文件。
例如
假设我们要在mytable
和col1
的{{1}}列中插入行,就像这样:
col2
参考:https://dev.mysql.com/doc/refman/8.0/en/load-data.html
作为LOAD DATA语句中使用的表达式的演示:
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),'')
返回
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
答案 4 :(得分:0)
您也可以尝试Perl
$ cat carlos.txt
random1:random2:random3:random4
random1:random2:random3:random4:random5
random1:random2
random1:random2:random3:random4:randomN
$ perl -F: -lane ' print "insert into mytable (col1, col2) values (\x27",$F[0],"\x27,\x27",join(":",@F[1..$#F]),"\x27);" ' carlos.txt
insert into mytable (col1, col2) values ('random1','random2:random3:random4');
insert into mytable (col1, col2) values ('random1','random2:random3:random4:random5');
insert into mytable (col1, col2) values ('random1','random2');
insert into mytable (col1, col2) values ('random1','random2:random3:random4:randomN');
$