使用 AWK 解析 CSV 以生成 HTML 输出

使用 AWK 解析 CSV 以生成 HTML 输出

我有一个数据文件,其中包含多行逗号分隔的字段,如下所示:

United Kingdom, GB, +44

我想为文件中的每一行生成以下输出:

<option value="GB">United Kingdom +44</option>

我用 awk 得到了如下结果,但是在添加尖括号之后,我得到了错误的输出:

BEGIN{FS=",";}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
    print "<option value=\"" $2 "\">";                                                                                                                                                                                                                         

}

答案1

当涉及到嵌入引号时, awk 的printf函数可以更容易使用。

awk -F, '{printf("<option value=\"%s\">%s %s</option>\n", $2, $1, $3)}'

问题是每个字段之间也有空格。我们可以使用该gsub函数来修剪每个字段。

awk -F, '{gsub(/^ +| +$/,"", $2); printf("<option value=\"%s\">%s %s</option>\n", $2, $1, $3)}'

或者更简单的是更改我们的字段分隔符: awk -F' *, *' '{printf("%s %s\n", $2, $1, $3)}'

如果您需要修剪多个字段,那么最好使用循环或函数(取决于情况)。看https://stackoverflow.com/questions/9985528/how-can-i-trim-white-space-from-a-variable-in-awk了解更多信息。

答案2

命令

awk -F "," '{print "<option value="$2">United Kingdom "$3"</option>"}' filename| sed 's/GB/"&"/g'

输出

<option value= "GB">United Kingdom  +44</option>

相关内容