Bash:如何在CSV文件的列中使用“分隔符”抓取列?

时间:2013-03-27 21:20:07

标签: bash awk text-parsing

我从在线数据库下载了一些CSV文件。我试图将它们剪切下来,以便我可以将我需要的数据部分插入到我的SQL数据库中。

CSV文件包含以逗号分隔的字段,如下所示:

1,Peptidoglycan synthetase ftsI,ftsI,1574687,L42023,P45059,FTSI_HAEIN,"",,,,
3,Histidine decarboxylase,HDC,32109,X54297,P19113,DCHS_HUMAN,,HDC,HDC,HGNC:4855,00817
5,"Glutaminase liver isoform, mitochondrial",GLS2,6650606,AF110330,Q9UI32,GLSL_HUMAN,,GLS2,GLS2,HGNC:29570,05901
6,Coagulation factor XIII A chain,F13A1,182309,M22001,P00488,F13A_HUMAN,1FIE,F13A1,F13A1,HGNC:3531,00604
7,"Nitric oxide synthase, inducible",NOS2,292242,L09210,P35228,NOS2_HUMAN,2NSI,NOS2A,NOS2A,HGNC:7873,01225

这就是问题所在。看看第3和第5行。这两行中的第二列有逗号!我通常使用awk这样的东西,因为那个逗号在那里2美元搞砸了。

例如:

awk -F ',' '{print $2}' myfile.csv ## Obviously I will be printing a lot more stuff

如果如上所示对该部分进行了处理,那么第3行和第5行将被搞砸,因为这两行中的第2列的逗号用逗号括起来。

我该怎么做才能解决这个问题?

编辑:如果可能的话,我仍然坚持在shell中这样做。

1 个答案:

答案 0 :(得分:3)

你应该使用像Text::CSV这样的CSV解析器(如果你想的话,在一个单行中(所以仍然在shell中),它将为你做所有的魔术。

如果您更喜欢,请参阅csv模块

+ 中的示例:

$ python<<EOF
import csv

f = open("test.csv", 'rt')
try:
    reader = csv.reader(f)
    for row in reader:
        print row
finally:
    f.close()
EOF