我有一个包含 130 列的 CSV,我需要用它来做 3 个 csv。 我用 while 和 IFS 循环,因为我需要对每一行的变量做一些处理。
这是我所做的:
while IFS=";" read [my 130 vars]
[what i do with the vars]
done < file.csv
但我在某些行上遇到问题,因为我收到的原始 csv 如下:
"Hi";"i";"got;a problem"
正如你所看到的,我有一个问题;在一个值中。 IFS 将其解读为两个值的分离。 所以这是我的问题:有没有办法采取“;”作为分隔符而不仅仅是 ; ?
最佳答案
您可以使用awk
:
gawk 'BEGIN{FPAT="([^;]+)|(\"[^\"]+\")"}{for(i=1;i<=NF;i++){printf ("%s\n",$i)}}' file.csv
对于您的输入,它会产生:
"Hi"
"i"
"got;a problem"
(我怀疑是否可以使用 bash
实现所需的结果,即通过操作 IFS
。)
关于bash - 使用 IFS bash 进行 CSV 解析 : choose ";" as the separator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284578/