如何处理在同一列中有多个逗号分隔值的CSV文件[重复]

gpnt7bae  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(178)

此问题已在此处有答案

Can awk deal with CSV file that contains comma inside a quoted field?(12个回答)
昨天关门了。
我的CSV文件格式请注意,第6行的同一列有多个逗号分隔的值。

a,b,c,d,e,f
g,h,i,j,k,l
m,n,o,p,q,r
s,t,u,v,w,x
y,z,ab,bc,cd,de
"a,b,c",d,e,f,g,"h,i,j"

现在,如果我触发awk -F, '{print $1}',那么对于第6行,我会得到不正确的结果。

$ awk -F, '{print $1}' test.csv
a
g
m
s
y
"a

如何使用awk或其他实用程序(sed、cut等)处理同一列的多个逗号分隔值?

lpwwtiir

lpwwtiir1#

您可以使用GNU-awk和一个正则表达式来捕获""之间的:

➜  /tmp cat test.csv
a,b,c,d,e,f
g,h,i,j,k,l
m,n,o,p,q,r
s,t,u,v,w,x
y,z,ab,bc,cd,de
"a,b,c",d,e,f,g,"h,i,j"
➜  /tmp
➜  /tmp
➜  /tmp awk 'BEGIN { FPAT = "([^,]*)|(\"[^\"]+\")"; } { print $1 }' test.csv
a
g
m
s
y
"a,b,c"
➜  /tmp

FPAT值是描述每个字段(col)内容的正则表达式。
因此,在CSV示例中,“每个字段的内容”是(可选)用引号("")括起来的任何值。
有关详细信息,请参阅gawk手册:

相关问题