将csv文件转为sql文件的shell脚本

来源:

注意:

1、csv的行首建议用英文的,这样可以确保脚本生成的sql文件的列也是英文的。

2、csv中如果有特殊字符(例如换行) 会导致行错乱。

代码语言:bash复制
#!/bin/bash
set -euo pipefail

fname="$1"

# 先转一下编码,防止出现乱码的情况
iconv -f GBK -t UTF-8 ${fname} -o ${fname}.utf8

sed 's/\s*,*\s*$//g' "$fname".utf8 > tmp.csv
op=$(echo "$fname".utf8 | cut -d"." -f 1)
opfile="$op.sql"
op="\`$op\`"
columns=$(head --lines=1 tmp.csv | sed 's/,/`,`/g' | tr -d "\r\n")
columns="\`$columns\`"
tail --lines=+2 tmp.csv | while read l ; do
values=$(echo $l | sed 's/,/\",\"/g' | tr -d "\r\n")
values="\"$values\""
echo "INSERT INTO $op ($columns) VALUES ($values);"
done > "$opfile"
rm -f tmp.csv