我有几个CSV文件,我从一个在线数据库下载。我试图将它们删减,以便我可以将我需要的数据部分插入到我的SQL数据库中。Bash:如何从CSV文件的列中获取带“分隔符”的列?
的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
如果做的目的是该部分如上所示,第三和第五线将被拧起来,因为这两条线的第二列具有在其中一个逗号用引号包围分数。
我能做些什么来解决这个问题?
编辑:我想仍然坚持在shell中如果可能的话。
你需要训练的时候分隔符出现在字段来处理CSV格式的工具(如逗号出现在某些字段中)。考虑Perl和[Text :: CSV](http://search.cpan.org/perldoc?Text%3A%3ACSV),或者['csvfix'](http://code.google.com/p/csvfix /)。如果你喜欢Python或Ruby,可能有类似的模块。但是一般来说,从努力使像awk这样的工具用CSV工作来获得的灰色头发是不值得的。 – 2013-03-27 21:23:30