Analisando CSV com AWK para produzir saída HTML

Analisando CSV com AWK para produzir saída HTML

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 printfpode 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 gsubfunçã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>

informação relacionada