
次のように、カンマで区切られた複数行のフィールドを含むデータファイルがあります。
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>