【发布时间】:2019-08-26 13:01:56
【问题描述】:
我正在根据下面提供的示例寻找以下输入
示例
eno~ename~address~zip
123~abc~~560000~"a~b~c"
245~"abc ~ def"~hyd~560102
333~"ghi~jkl"~pub~560103
444~ramdev "abc def"~ram~10000
预期输出
"eno"~"ename"~"address"~"zip"
"123"~"abc"~""~"560000"~"a~b~c"
"245"~"abc ~ def"~"hyd"~"560102"
"333"~"ghi~jkl"~"pub"~"560103"
"444"~"ramdev ""abc def"""~"ram"~"10000"
当前代码:
awk 'BEGIN{s1="\"";FS=OFS="~"} {for(i=1;i<=NF;i++){if($i!~/^\"|\"$/){$i=s1 $i s1}}} 1' sample
当前代码不适用于最后一行。这是对 insert quotes for each field using awk 的增强
【问题讨论】:
-
你的问题不是很清楚,但是如果我理解正确的话,你想要的是每个字段周围的引号,字段中间的现有引号加倍,对吗?跨度>
-
您的最后一行不太有意义。引用“ramdev”的依据是什么?如果我认为单个空格也是波浪号(~)之类的分隔符,即使那样,为什么
"abc def"还要加引号? -
查看我之前的评论 - stackoverflow.com/questions/57655449/…。如果您无法在whats-the-most-robust-way-to-efficiently-parse-csv-using-awk 上发布解决方案来为您工作,那么请以该脚本为起点提出问题,而不是其他一些无法工作且无法增强以在您的问题中工作的脚本.
-
您要做的是使用 Text::CSV Perl 模块的简单任务。 metacpan.org/pod/Text::CSV
-
在您上一个问题中,在您得到一些答案后,您修改了输入以包含一个字段包含换行符的情况,因此您已经收到的答案无效。如果您确实需要提出新问题,请确保您的示例输入/输出包含带有换行符的字段(以及任何其他重要的情况),如果它们可以出现在您的真实数据中。