私のような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,"\"");
を試しましたが、助けにはなりませんでした。
グローバル置換には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シェルなどの他のツールを使用した、スタックオーバーフローに関する 全体の投稿 があります。
最も簡単なアプローチ:
tr -d '"' <a.csv >b.csv
sed
を使用した別のソリューション:
sed -e 's/"//g' a.csv > b.csv
このコマンドを使用できます
awk '{gsub("\"",RS);print}' a.csv > b.csv