我知道这听起来可能在线上有2000个答案,但是我没有找到针对此特定情况(例如-vFPAT
此答案和其他答案)的答案,因为我需要与之保持联系split
。我必须用awk拆分CSV文件,其中双引号内可能有一些值。我需要告诉split
函数是否忽略,
内部""
以便获取元素数组。
这是我根据其他答案尝试的示例
cat try.txt
Hi,I,"am,your",father
maybe,you,knew,it
but,"I,wanted",to,"be,sure"
cat tst.awk
BEGIN {}
{
n_a = split($0,a,/([^,]*)|("[^"]+")/);
for (i=1; i<=n_a; i++) {
collecter[NR][i]=a[i];
}
}
END {
for (i=1; i<=length(collecter); i++)
{
for (z=1; z<=length(collecter[i]);z++)
{
printf "%s\n", collecter[i][z];
}
}
}
但没有运气:
awk -f tst.awk try.txt
,
,
,
,
,
,
,
,
,
我根据其他类似的答案尝试了其他正则表达式,但在这种情况下均不起作用。
请注意:双引号字段可能不存在,可能不止一个,并且没有固定的位置/长度!
在此先感谢您的帮助!
gnu awk有一个称为的功能patsplit
,可让您使用FPAT
模式进行分割:
$ awk '{ print "RECORD " NR ":"; n=patsplit($0, a, "([^,]*)|(\"[^\"]+\")"); for (i=1;i<=n;++i) {print i, "|" a[i] "|"}}' file
RECORD 1:
1 |Hi|
2 |I|
3 |"am,your"|
4 |father|
RECORD 2:
1 |maybe|
2 |you|
3 |knew|
4 |it|
RECORD 3:
1 |but|
2 |"I,wanted"|
3 |to|
4 |"be,sure"|
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句