【问题标题】:How to parse the csv file without two blank fields in awk?如何在awk中解析没有两个空白字段的csv文件?
【发布时间】:2017-07-11 01:38:53
【问题描述】:

csv结构如下。

"field1","field2","field3,with,commas","field4",          

csv 文件中有四个字段。
第一个:field1
第二个:field2
第三个:field3,with,commas
第四:field4

这是我的 awk 正则表达式。

 '^"|","|",$' 

debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print NF}'
6
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print $1}'

debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print $2}'
field1
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print $3}'
field2
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print $4}'
field3,with,commas
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print $5}'
field4
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F '^"|","|",$' '{print $6}'

我的正则表达式 '^"|","|",$' 中还有两个问题。

1.4 个字段被 '^"|","|",$' 解析为 6 个字段。
2.$1和$6被解析成空白。

如何编写正则表达式格式来制作:

echo '"field1","field2","field3,with,commas","field4",' |awk -F format '{print NF}'
4
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F  format '{print $1}'
field1
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F format '{print $2}'
field2
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F foramt '{print $3}'
field3,with,commas
debian8@hwy:~$ echo '"field1","field2","field3,with,commas","field4",' |awk -F format '{print $4}'
field4

【问题讨论】:

    标签: csv awk


    【解决方案1】:

    解决方法是将FS 设置为"," 并使用gsub 删除每条记录开头和结尾的字符:

    echo '"field1","field2","field3,with,commas","field4",' | awk -v FS='","' '{gsub(/^"|",$/, ""); print NF, $1, $2, $3, $4}'
    4 field1 field2 field3,with,commas field4
    

    【讨论】:

    • echo '"field1","field2","field3,with,commas","field4",' | awk -F '","' '{gsub(/^"|",$/, ""); print NF, $1, $2, $3, $4}' 4 field1 field2 field3,with,commas field4
    • 为了更简单。
    【解决方案2】:

    我认为FPAT 变量可能是您想要的。查看文档和示例in the Users Guide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2015-05-08
      • 2012-09-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多