Анализ CSV с помощью AWK для создания HTML-вывода

Анализ CSV с помощью AWK для создания 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>

Связанный контент