我有一个要求。
我的 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