导入CSV换行问题

时间:2014-04-28 21:37:06

标签: mysql bash csv

我正在使用BASH脚本向MySQL运行LOAD DATA INFILE。我的问题是尝试正确终止一行。运行我的脚本后,我注意到每个其他行都被跳过。这是一些示例数据:

CSV文件读取:

"COMP","POL","STATUS","TYPE","CODE","MODE","NUMBER"
"220","1243918,"TGI","NA","AS-T5","M6","793930""
"220","1653912,"TGS","NA","NON","M6","793975""
"220","1471618,"TGS","NA","AS-T6","M6","793915""

这是我导入CSV文件的BASH SCRIPT:

mysql -u$User -p$Pass -D$Db<<EOFMYSQL
LOAD DATA INFILE '$InputFile' INTO TABLE $Table
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(comp,pol,status,type,code,mode,number);
EOFMYSQL

但这是我的数据库中的行:

220  1243918  TGI  NA  AS-T5  M6 793930""220
220  1471618  TGS  NA  AS-T6  M6 793915""220

请注意,数据库中的最后一个字段NUMBER有两组引号,以及CSV文件中下一行的第一个字段。第二行被跳过。

我尝试了很多不同的LINES TERMINATED BY选项但是却无法弄清楚如何正确指定换行符?!

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以通过运行以下方法检查您的文件是否包含奇怪的Windowsy回车:

cat -vet yourfile

并寻找“^ M”

您可以通过

删除它们
tr -d '\r' < WindowsFile > UnixFile

或使用“dos2unix”

EDITED

根据您的评论,您似乎在行尾有两组相邻的双引号 - 这是正确的吗?如果是这样,您可以使用以下内容替换单行的两行引号:

sed 's/""$/"/' YourFile > NewFile