Analysieren von CSV mit AWK zum Erzeugen einer HTML-Ausgabe

Analysieren von CSV mit AWK zum Erzeugen einer HTML-Ausgabe

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 printfkann 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 gsubFunktion 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>

verwandte Informationen