将csv文件转换为mysql插入语句

时间:2013-05-14 04:15:57

标签: linux bash sed awk

我试图从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);

谢谢

5 个答案:

答案 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文件中获取数据并分割|符号。