4

我试图逐行解析一个csv文件,它的格式是这样的:

"name","content1,with commas as you see", "content2, also may contain commas", "..."
...
...

我想获取特定列上的内容,不带引号。例如:第一列和第三列。所以预期的内容应该是:

name  (if get column 1)
content2, also may contain commas   (if get column 3)

我尝试使用 awk 但它没有用。我也试过:

while IFS=, read col1 col2 col3 col4; 
do 
echo "got ${col1}|${col3}"; 
done < file

但是它包含引号“”,并且col3的内容是错误的,它在每列中混合了逗号。那么我应该如何拆分每列中包含逗号的格式呢?

4

2 回答 2

3

如果你有GNU awk那么FPAT会来拯救你。

gawk '{print $1,$3}' FPAT="([^,]+)|(\"[^\"]+\")" my.csv

awk我们通常使用FSwhich 定义字段不是什么,而不是字段是什么。在这种特殊情况下,我们真的想通过它们是什么来定义字段,并FPAT允许我们这样做。

于 2013-06-11T13:39:12.633 回答
3

由于这些复杂性,如果您使用像这样的实际 CSV 解析器,可能会容易得多csvtool

$ csvtool col 3 - <<< '"name","content1,with commas as you see", "content2, also may contain commas", "..."'
"content2, also may contain commas"
于 2013-06-11T14:11:19.173 回答