0

オンライン データベースからダウンロードした 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行目を見てください。これらの 2 行の 2 列目にコンマが含まれています。私は通常、このようなものに awk を使用します。そのコンマがあるため、$2 が台無しになります。

たとえば、次のようになります。

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

上記のようにその部分にそれを行うと、3行目と5行目が台無しになります。これらの2行の2列目にカンマが引用符で囲まれているためです。

これを回避するにはどうすればよいですか?

編集:可能であれば、シェルでこれを行うことに固執したいと思います。

4

1 に答える 1

3

Text::CSVのような CSV パーサーを使用する必要があります(必要に応じてワンライナーで (したがってシェル内で))、すべての魔法を実行します。

代わりに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
于 2013-03-27T21:23:10.307 に答える