3

我正在尝试从 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);

谢谢

4

5 回答 5

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
于 2013-05-14T04:21:16.170 回答
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

我希望这有效

于 2013-12-05T17:57:48.100 回答
0

这可能对您有用(GNU sed):

sql="insert into table (id,value,status,starttime,endtime,number,phone,number) values"
sed 'y/|/,/;s/.*/'"$sql"' (&);/' file
于 2013-05-14T10:32:14.890 回答
0

您可以使用 csvkit,请参阅如何让 csvkit/csvsql 为 csv 文件生成插入语句?

这些语句将针对 csvkit 背后的数据库引擎 sqlite,但转换应该很容易。

于 2019-02-07T09:16:02.633 回答
0

虽然这个问题已经很老了,但有人可能会摔倒......

所以另一种方法是使用标准方法来读取具有LOAD DATA 语法的 CSV 文件,该语法允许使用 CSV 文件读取数据并将其插入表中:

LOAD DATA INFILE '/tmp/test.csv' INTO TABLE test FIELDS TERMINATED BY '|';

它从 CSV 文件中获取数据并拆分 | 象征。

于 2019-02-07T09:25:46.787 回答