我正在使用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选项但是却无法弄清楚如何正确指定换行符?!
任何建议都将不胜感激!
锤
答案 0 :(得分:1)
您可以通过运行以下方法检查您的文件是否包含奇怪的Windowsy回车:
cat -vet yourfile
并寻找“^ M”
您可以通过
删除它们tr -d '\r' < WindowsFile > UnixFile
或使用“dos2unix”
EDITED
根据您的评论,您似乎在行尾有两组相邻的双引号 - 这是正确的吗?如果是这样,您可以使用以下内容替换单行的两行引号:
sed 's/""$/"/' YourFile > NewFile