Eu tenho um arquivo de dados com linhas de campos separados por vírgula como este:
United Kingdom, GB, +44
e quero produzir a seguinte saída para cada linha do arquivo:
<option value="GB">United Kingdom +44</option>
Cheguei ao seguinte com o awk, mas depois de adicionar os colchetes angulares, estou obtendo uma saída distorcida:
BEGIN{FS=",";}
{
print "<option value=\"" $2 "\">";
}
Responder1
A função do awk printf
pode ser mais fácil de usar quando se trata de cotações incorporadas.
awk -F, '{printf("<option value=\"%s\">%s %s</option>\n", $2, $1, $3)}'
O problema é que você também tem espaços em branco entre cada campo. Podemos usar a gsub
função para cortar cada campo.
awk -F, '{gsub(/^ +| +$/,"", $2); printf("<option value=\"%s\">%s %s</option>\n", $2, $1, $3)}'
Ou o que é mais fácil é alterar nosso separador de campos: awk -F' *, *' '{printf("%s %s\n", $2, $1, $3)}'
Se você precisar cortar vários campos, talvez seja melhor usar um loop ou uma função (dependendo da situação). Verhttps://stackoverflow.com/questions/9985528/how-can-i-trim-white-space-from-a-variable-in-awkpara mais informações.
Responder2
Comando
awk -F "," '{print "<option value="$2">United Kingdom "$3"</option>"}' filename| sed 's/GB/"&"/g'
saída
<option value= "GB">United Kingdom +44</option>