我有一个数据文件,其中包含多行逗号分隔的字段,如下所示:
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>