我有一个超过 2000 万行的 csv 文件,分隔符是竖线。问题是文件中有一个文本列,其中文本中还包含竖线,这会弄乱数据并导致在 SQL Server 中导入 csv 文件时该列移动到下一列。
文件太大而无法处理,例如如果我们想使用精美的文本编辑器添加限定符或更改分隔符类型。
有什么想法吗?理想情况下,像这样的问题有什么通用的解决方案吗?有时,尽管您使用限定符,但可能存在包含类似限定符的字符串、分隔符等的文本字段。
这些字段不带引号。这些行看起来就像这样:
field1|field2|field3|field4
1|000|some text|some text
2|001|some text con|taining pipe|some text
3|002|some text|some text
最佳答案
可以访问 bash(Linux/Unix/Cygwin 等)
为了估计问题的严重性,请检查具有 4 个字段和其他数量字段的记录数。
awk -F'|' '{rec[NF==4?"NF=4":"NF!=4"]++}END{for(nf in rec){print nf,rec[nf]}}' MyFile.csv
生成一个包含良好记录的文件并加载它。
awk -F'|' 'NF==4{print}' MyFile.csv > MyFile_good.csv
生成一个包含不良记录的文件,并检查是否可以手动或其他方式修复它(如果您识别出模式)
awk -F'|' 'NF!=4{print}' MyFile.csv > MyFile_bad.csv
支持限定符
"1"|"000"|"some text"|"some text"
"2"|"001"|"some text con|taining pipe"|"some text"
"3"|"002"|"some text"|"some text"
我们现在不再定义分隔符 (awk -F'|'
),而是定义限定字段 (FPAT="\"[^\"]*\"“
)
awk 'BEGIN{OFS="\t";FPAT="\"[^\"]*\""}{rec[NF==4?"NF=4":"NF!=4"]++}END{for(nf in rec){print nf,rec[nf]}}' MyFile.csv
关于sql - 字段值内的分隔符 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40737210/