【发布时间】:2019-02-27 04:49:16
【问题描述】:
我有一个 CSV 文件,但与 related 问题不同,它有一些列包含带逗号的双引号字符串,例如
foo,bar,baz,quux
11,"first line, second column",13.0,6
210,"second column of second line",23.1,5
(当然更长,引号的逗号数量不一定是1或0,文本也不是可预测的。)文本也可能在双引号内有(转义)双引号,或者没有双引号完全引用一个通常引用的字段。我们可以做的唯一假设是没有引用的换行符,因此我们可以使用\n 简单地拆分行。
现在,我想提取一个特定的列(比如第三列)——比如,打印在标准输出上,每行一个值。我不能简单地使用逗号作为字段分隔符(因此,例如,使用cut);相反,我需要更复杂的东西。那会是什么?
注意:我在 Linux 系统上使用 bash。
【问题讨论】:
-
您好,“双引号”是什么意思?
-
awk 'BEGIN{FS=OFS=","} NF==5{$2=$2 OFS $3; $3=$4; $4=$5; NF=4} {print $3}' file? -
@NemanjaRadojković 建议 CSVKit。似乎相当有用,虽然不是一个“外壳解决方案”。太糟糕了,他删除了他的答案。
-
@oguzismail:我的意思是“我的名字是 \"John Smith\",你叫什么?”可以出现在 CSV 文件中。
-
@Cyrus:为什么会这样?
标签: bash csv text-processing quoting