bash - 使用 IFS bash 进行 CSV 解析 : choose ";" as the separator

标签 bash parsing csv ifs

我有一个包含 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/

相关文章:

bash - 从日志文件中提取特定单词

bash - 如何避免 echo 关闭 FIFO 命名管道? - Unix FIFO 的有趣行为

Java String parseFloat 或 double 表示 x.xxxxxx 数字?

javascript - 在 JavaScript 中解析查询字符串

python - 如何将文本文件的每一列作为单独的列表打开?

mysql - 为什么将脚本加载到 mysql 时会出现此错误?

linux - 本地文件的 Shell 脚本

bash - 使用 Shell 工具(sed | awk...等)从给定的 sample.dat 文件计算最大、最小和平均字段值

C#距离(英里/公里/等)字符串解析库

windows - 使用 cmd 提示符编写脚本