web-dev-qa-db-ja.com

csvの二重引用符を削除する方法

私のようなCSVファイルがあります

_a.csv
"1,2,3,4,9"
"1,2,3,6,24"
"1,2,6,8,28"
"1,2,4,6,30"
_

私のようなものが欲しい

_b.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30
_

私はawk '{split($0,a,"\"");を試しましたが、助けにはなりませんでした。

6
joker21

グローバル置換にはgsub()関数を使用します

$ awk '{gsub(/\"/,"")};1' input.csv                    
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

新しいファイルに出力を送信するには、>シェル演算子を使用します。

awk '{gsub(/\"/,"")};1' input.csv > output.csv

配列への分割アプローチも使用できますが、必須ではありませんが、次のように使用できます。

$ awk '{split($0,a,"\""); print a[2]}' input.cvs       
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

この特定の質問では、一般的なパターンは引用符が行の最初と最後にあるということです。つまり、それをフィールドセパレーターとして扱うこともできます。フィールド1はnull、フィールド2は1,2,3,4、フィールドは3もnullです。したがって、次のことができます。

awk -F '\"' '{print $2}' input.csv

また、行全体の部分文字列を取り出すこともできます。

awk '{print substr($0,2,length($0)-2)}' quoted.csv

最初と最後の文字を取り除くと言えば、sedやPOSIXシェルなどの他のツールを使用した、スタックオーバーフローに関する 全体の投稿 があります。

5

最も簡単なアプローチ:

tr -d '"' <a.csv >b.csv
9
Wildcard

sedを使用した別のソリューション:

sed -e 's/"//g' a.csv > b.csv
4
Zumo de Vidrio

このコマンドを使用できます

awk '{gsub("\"",RS);print}' a.csv >  b.csv
0
vip_noob