当前位置:  开发笔记 > 编程语言 > 正文

使用gawk解析CSV文件

如何解决《使用gawk解析CSV文件》经验,为你挑选了2个好方法。

你如何使用gawk解析CSV文件?简单设置FS=","是不够的,因为带有逗号的引用字段将被视为多个字段.

使用的示例FS=","不起作用:

文件内容:

one,two,"three, four",five
"six, seven",eight,"nine"

gawk脚本:

BEGIN { FS="," }
{
  for (i=1; i<=NF; i++) printf "field #%d: %s\n", i, $(i)
  printf "---------------------------\n"
}

输出不好:

field #1: one
field #2: two
field #3: "three
field #4:  four"
field #5: five
---------------------------
field #1: "six
field #2:  seven"
field #3: eight
field #4: "nine"
---------------------------

期望的输出:

field #1: one
field #2: two
field #3: "three, four"
field #4: five
---------------------------
field #1: "six, seven"
field #2: eight
field #3: "nine"
---------------------------

Jonathan Lef.. 11

简短的回答是"如果CSV包含笨拙的数据,我不会使用gawk解析CSV",其中"尴尬"意味着CSV字段数据中的逗号等内容.

接下来的问题是"你将要做什么其他处理",因为这将影响你使用的替代品.

我可能会使用Perl和Text :: CSV或Text :: CSV_XS模块来读取和处理数据.请记住,Perl的原文为部分作为一个awksed杀手-因此a2ps2p程序仍然分布用Perl其将awksed脚本(分别)转换为Perl.



1> Jonathan Lef..:

简短的回答是"如果CSV包含笨拙的数据,我不会使用gawk解析CSV",其中"尴尬"意味着CSV字段数据中的逗号等内容.

接下来的问题是"你将要做什么其他处理",因为这将影响你使用的替代品.

我可能会使用Perl和Text :: CSV或Text :: CSV_XS模块来读取和处理数据.请记住,Perl的原文为部分作为一个awksed杀手-因此a2ps2p程序仍然分布用Perl其将awksed脚本(分别)转换为Perl.



2> BCoates..:

gawk版本4手册说要使用FPAT = "([^,]*)|(\"[^\"]+\")"

FPAT被定义,它禁用FS和通过内容,而不是通过分离器指定字段.


FPAT需要gawk 4.花了我一些时间......;)
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有