4

二重引用符で囲まれた文字列とその間のコンマで区切られた値を持つ CSV ファイルから列を削除するにはどうすればよいですか? 以下の形式のようなヘッダーを含む 4 行のファイル 44.csv があります。

column1, column2, column3, column 4, column5, column6
12,455,"string with quotes, and with a comma in between",4432,6787,890,88
4432,6787,"another, string with quotes, and with two comma in between",890,88,12,455
11,22,"simple string",77,777,333,22

ファイルから 1,2,3 列を切り取る必要があるため、以下のように cut コマンドを使用しました。

cut -d"," -f1,2,3 44.csv > 444.csv

私は次のように出力を得ています

column1, column2, column3
12,455,"string with quotes
4432,6787,"another string with quotes
11,22,"simple string"

しかし、私は出力が必要です

column1, column2, column3
12,455,"string with quotes, and with a comma in between"
4432,6787,"another, string with quotes, and with two comma in between"
11,22,"simple string"

どんな助けでも大歓迎です。

ありがとうドゥルヴ。

4

3 に答える 3

3

GNU awkバージョン 4 以降では、 を使用してパターンを定義できますFPAT

gawk '{print $1, $2, $3}' FPAT="([^,]+)|(\"[^\"]+\")" OFS="," 44.csv

テスト:

$ gawk '{print $1, $2, $3}' FPAT="([^,]+)|(\"[^\"]+\")" OFS="," mycsv.csv
column1, column2, column3
12,455,"string with quotes, and with a comma in between"
4432,6787,"another, string with quotes, and with two comma in between"
11,22,"simple string"
于 2013-06-19T19:12:55.287 に答える
0

この特殊なケースでは"、区切り文字としてカットを使用しておそらくそれを行うことができますが、私は強くお勧めしません.その中で、例えば、\"それもだますでしょう。または、より多くの列が引用される可能性があります (これは完全に有効な CSV 主義です)。

よりスマートなツールが必要です! 最も簡単に入手できるのは、Perl と Text::CSV モジュールです。ほぼ確実に Perl がインストールされており、環境によっては、Text::CSV をパッケージとして CPAN.pm と一緒に、または cpanminus と一緒にインストールする必要があります。率直であること。

于 2013-06-19T19:19:36.553 に答える