Ich habe eine Datendatei mit Zeilen aus durch Kommas getrennten Feldern wie diesen:
United Kingdom, GB, +44
und ich möchte für jede Zeile in der Datei die folgende Ausgabe erzeugen:
<option value="GB">United Kingdom +44</option>
Mit awk bin ich bis zum Folgenden gekommen, aber nach dem Hinzufügen der spitzen Klammern erhalte ich eine verstümmelte Ausgabe:
BEGIN{FS=",";}
{
print "<option value=\"" $2 "\">";
}
Antwort1
Die Funktion von awk printf
kann bei eingebetteten Anführungszeichen einfacher zu verwenden sein.
awk -F, '{printf("<option value=\"%s\">%s %s</option>\n", $2, $1, $3)}'
Das Problem dabei ist, dass zwischen den einzelnen Feldern auch Leerzeichen vorhanden sind. Wir können die gsub
Funktion verwenden, um jedes Feld zu kürzen.
awk -F, '{gsub(/^ +| +$/,"", $2); printf("<option value=\"%s\">%s %s</option>\n", $2, $1, $3)}'
Oder, was einfacher ist, wir ändern unseren Feldtrenner: awk -F' *, *' '{printf("%s %s\n", $2, $1, $3)}'
Wenn Sie mehrere Felder trimmen müssen, ist es möglicherweise besser, eine Schleife oder eine Funktion zu verwenden (je nach Situation). Siehehttps://stackoverflow.com/questions/9985528/wie-kann-ich-weiße-räume-von-einer-variable-in-awk-entfernenFür mehr Information.
Antwort2
Befehl
awk -F "," '{print "<option value="$2">United Kingdom "$3"</option>"}' filename| sed 's/GB/"&"/g'
Ausgabe
<option value= "GB">United Kingdom +44</option>