我试图从CSV数据生成MySQL文件
90927744|1356976814398|0|1356976815339|18563182571|18563182571|18568753009|18563574221
是否有一种方法可以使用awk或sed生成mysql insert语句,如下所示
insert into table (id,value,status,starttime,endtime,number,phone,number) values (90927744,1356976814398,0,1356976815339,18563182571,18563182571,18568753009,18563574221);
谢谢
答案 0 :(得分:3)
从输入中提取特定字段....
$echo "90927744|1356976814398|0|1356976815339|18563182571|18563182571|18568753009|18563574221" | awk -F "|" '{print $4}'
1356976815339
如果a.txt
中有一行(请参阅下面的脚本,了解输入文件中的多行)
$cat a.txt | awk -F "|" '{print $4}'
所以输出你想要的查询 -
$cat a.txt | awk -F "|" '{printf("insert into table (id,value,status,starttime,endtime,number,phone,number) values (%d, %d, %d, %d, %d, %d, %d, %d) \n", $1, $2, $3, $4, $5, $6, $7, $8)}'
如果您的文件有多行,请使用以下脚本(或根据您的需要进行调整)
while read line
do
echo "$line" | awk -F "|" ........
done < a.txt
答案 1 :(得分:1)
只是为了改进上面写的AWK语句,而不是while循环,我们可以使用
awk -F "|" '{printf("insert into table (id,value,status,starttime,endtime,number,phone,number) values (%d, %d, %d, %d, %d, %d, %d, %d) \n", $1, $2, $3, $4, $5, $6, $7, $8)}' a.txt >> result.txt
我希望这有效
答案 2 :(得分:0)
这可能适合你(GNU sed):
sql="insert into table (id,value,status,starttime,endtime,number,phone,number) values"
sed 'y/|/,/;s/.*/'"$sql"' (&);/' file
答案 3 :(得分:0)
您可以使用csvkit,请参见How to let csvkit/csvsql generate insert statements for csv file?
该语句适用于csvkit背后的数据库引擎sqlite,但转换应该很容易。
答案 4 :(得分:0)
尽管这个问题已经很老了,但还是有人会掉下来...
另一种方法是使用标准方法通过LOAD DATA syntax读取CSV文件,该方法允许使用CSV文件读取数据并将其插入表中:
LOAD DATA INFILE '/tmp/test.csv' INTO TABLE test FIELDS TERMINATED BY '|';
将从CSV文件中获取数据并分割|符号。