我有幾個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