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

printf埋め込み引用符に関しては、awk の関数の方が使いやすくなります。

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>

関連情報