我正在使用制表符分隔文件,我希望在列#1周围添加引号,如果字符串中有引号,还要添加其他引号(作为转义)。
这是文件的头部:
$i = 0;
while ($row = mysqli_fetch_array($result)) {
if ($i % 3 == 0){
echo '<div class="row">';
}
echo '<div class="col-lg-4 col-md-4 col-sm-4">';
//Your column data here
echo '</div>';
if ($i % 3 == 2){
//Close the .row div
echo '</div>';
}
$i++;
}
if ($i % 3 != 0){
//Close the .row div in case there aren't enough items left to fill up to 3
echo '</div>';
}
期望的结果:
auto_type compact 323
auto_type truck 219
auto_type truck 5" 25
这是我最初尝试至少在列中添加引号:
auto_type "compact" 323
auto_type "truck" 219
auto_type "truck 5"" 25
答案 0 :(得分:2)
您想要的输出错误,因为它使您的第二个字段留下了无与伦比的双引号,应该是:
$ awk 'BEGIN{FS=OFS="\t"} {gsub(/"/,"\"\"",$2); $2="\"" $2 "\""} 1' file
auto_type "compact" 323
auto_type "truck" 219
auto_type "truck 5""" 25
答案 1 :(得分:1)
$ awk 'BEGIN{FS=OFS="\t"} {gsub(FS,"\""FS); sub(/\"\t/,FS"\"",$0); print $0}' foo
auto_type "compact" 323
auto_type "truck" 219
auto_type "truck 5"" 25
FS
替换为"FS
"FS
替换为FS"
答案 2 :(得分:0)
如果您需要将数据中已有的引号加倍,则可以在字段周围添加引号之前执行此操作。因此:
$ awk -F'\t' 'BEGIN { OFS=FS } { gsub(/"/, "\"\"", $2); $2 = "\"" $2 "\""; print }' data |
> pr -e16 -l1 -t
auto_type "compact" 323
auto_type "truck" 219
auto_type "truck 5""" 25
$
(pr
命令将标签扩展为16个空格,因为-e16
;它使它们易于查看,并对齐数据。)
如果您想要问题中显示的输出,请省略gsub
:
$ awk -F'\t' 'BEGIN { OFS=FS } { $2 = "\"" $2 "\""; print }' data | pr -l1 -t -e16
auto_type "compact" 323
auto_type "truck" 219
auto_type "truck 5"" 25
$
但是,对于我所知道的任何CSV阅读器,此输出不是可用的数据文件。
答案 3 :(得分:0)
awk '{sub($2, "\"&\"")sub(/truck\42 5/,"truck 5\42")}1' file
auto_type "compact" 323
auto_type "truck" 219
auto_type "truck 5"" 25