リクエストがあります。
私のCSVファイルに文字列があり、引用符を削除せずに"Testurteil "sehr gut""
ファイルをロードする必要があります。redis
または私はこれが欲しい:Testurteil "sehr gut"
閉じる引用符があっても構いません。
答え1
努力する:
perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
s@(^"|"$|\\.)|"@$1||"\\\""@ge;$r/ge' file.csv
経験的な方法を使用して、文字を囲む二重引用符文字を識別し、バックスラッシュでエスケープします。
たとえば、次のように変更されます。
"asd","","a,b"c,d"e,f",""",,blah
到着する:
"asd","","a,b\"c,d\"e,f","\"",,blah
(原本はそのままにしてくださいfile.csv.back
)
エスケープの代わりに一重引用符に変更するには:
perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
s@(^"|"$|\\.)|"@$1||"'\''"@ge;$r/ge' file.csv
答え2
たぶんこんなことはありませんか?
cat test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"
すべての行のすべてのフィールドを印刷します(検証用のみ)。
awk -F, '{print $0}' test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"
awkコマンドラインオプション "-F"を使用すると、標準のスペースとは異なるフィールド区切り文字を設定できます。
「特殊フィールド」のみを印刷します。つまり、すべての行に対してフィールド番号3を印刷します。
awk -F, '{print $3}' test.csv
"Testurteil "sehr gut""
"Testurteil "vernichtend""
より読みやすくするために、いくつかの説明があります(またはキー:値ストアにエクスポート)。
awk -F, '{print "Line" FNR ":field3 " $3}' test.csv
Line1:field3 "Testurteil "sehr gut""
Line2:field3 "Testurteil "vernichtend""
CSVファイルを使用する追加フィールド:
awk -F, '{print "Line number " FNR ": " $3 " for product "$1}' test.csv
Line number 1: "Testurteil "sehr gut"" for product 17
Line number 2: "Testurteil "vernichtend"" for product 99