awk在文件列中添加引号

时间:2016-09-13 13:45:59

标签: awk

我正在使用制表符分隔文件,我希望在列#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

4 个答案:

答案 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