如何在没有第一行/标题(DATE,ITEM)的情况下将脚本更改为mysql?

时间:2017-11-07 08:31:21

标签: bash shell csv ifs

DATE,ITEM 
2017-11-06 ,01001
2017-11-06 ,01005
2017-11-06 ,01013

---我使用这个脚本----

#!/bin/bash

IFS=,
while read DATE ITEM

do
        echo "INSERT INTO DB (DATE, item) VALUES ('$DATE', '$item');"

2 个答案:

答案 0 :(得分:0)

以下命令将首先格式化您的输入文件,并替换awk的','选项卡,以便能够正确处理它。

然后awk将开始处理第二行的输出,然后创建插入查询。

sed 's/ ,/\t/g' test.txt | awk '{if(NR>=2) print "INSERT INTO DB (DATE, item) VALUES(\x27"$1"\x27, \x27"$2"\x27);";}' > my_insert_queries.out

您还可以为awk定义另一个字段分隔符:

  

在awk的命令行中,FS可以指定为-F <sep> (or -v FS=<sep>)

而不是使用sed来提高处理速度。

awk -F' ,' '{if(NR>=2) print "INSERT INTO DB (DATE, item) VALUES(\x27"$1"\x27, \x27"$2"\x27);";}' test.txt > my_insert_queries.out

答案 1 :(得分:0)

使用awk清理输入,然后将空分隔值传递给while-loop,如下所示:

# cat 47153204.txt #note that I have added extra spaces/commas to make things more difficult

DATE,ITEM 
2017-11-06,01001
2017-11-06, 01005
2017-11-06, 01013

# awk -F '[ ,]+' 'NR>1{printf "%s\0%s\0",$1,$2}' 47153204.txt |
while IFS= read -r -d '' date time
do
# Use the date & time values to construct the query.
done