想在一个有两列的mysql表中插入一个包含大量行的txt文件,其中包含以下结构:
random1:random2:random3:random4
random1:random2:random3:random4:random5
random1:random2
random1:random2:random3:random4:randomN
...
其中分隔符为“:”
“random”表示一组随机字符。
第一列中应该是字符串random1
在第二列中应存储字符串random2:random3:random4:randomn的其余部分
要提取第一列的子字符串,已尝试:
echo "random1:random2:random3:random4:randomN" | awk -F":" '{print (NF>1)? $1 : ""}'
echo "random1:random2:random3:random4:randomN" | sed 's/:.*//'
echo "random1:random2:random3:random4:randomN" | cut -d ":" -f1
如何从第一个分隔符“:”中提取子字符串直到行尾,并将其存储在mysql表中?
提前谢谢!
5条答案
按热度按时间cbeh67ev1#
如果我们要调用mysql在一个表中插入大量的行。。。假设random1,random2,random3的“随机”特性排除了文本制表符
0x09
,'\t'
...我不会在bash中解析文件,这是一个很大的开销。我只需要执行mysql客户机,然后发布一个mysql
LOAD DATA
语句,并让mysql读取文件并对其进行解析。例如
假设我们要将行插入到
mytable
柱col1
以及col2
,类似于:参考文献:https://dev.mysql.com/doc/refman/8.0/en/load-data.html
作为load data语句中所用表达式的演示:
退货
camsedfj2#
在mysql中,您可以按照以下步骤使用
:
分隔符:请注意,这种技术要求您提前知道字符串中的最大部分数。
ej83mcc03#
你也可以试试perl
vm0i2vca4#
这会将第一个“:”更改为“,”以生成csv文件:
然后可以将其导入表中。
或者,可以创建sql脚本:
然后运行它:
w80xi6nr5#
以下是解决方案的一部分(可能):