Wie lösche und ersetze ich mit awk ein Feldtrennzeichen aus einer Spalte?

Wie lösche und ersetze ich mit awk ein Feldtrennzeichen aus einer Spalte?

Ich habe eine CSV-Datei wie diese:

name_var;type_var;
id;string;
dt_depot;string;
num_artc;string

Ich möchte die ersten löschen ;und die letzten ersetzen, , sodass die Ausgabe folgendermaßen aussieht:

name_var type_var,
id string,
dt_depot string,
num_artc string

Antwort1

Einfach mit sedErsetzung:

$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string

Als Lösung können Sie den folgenden Ausdruck awkverwenden, wenn die Eingabedatei nur zwei ausgefüllte Spalten enthalten soll :awk

$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string

Antwort2

$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string

Das Skript ändert jedes ;am Ende einer Zeile in und ,konvertiert dann jedes verbleibende ;in , ,indem es einem Feld einen Wert zuweist, wodurch alle Eingabefeldtrennzeichen ( ;wie von festgelegt -F';') in das Ausgabefeldtrennzeichen (standardmäßig leer) geändert werden. Anschließend druckt es die aktuelle Zeile, indem es eine wahre Bedingung (1) angibt, die die Standardaktion ( print $0) auslöst.

Antwort3

Mit awkso etwas kann die Arbeit erledigt werden:

awk -F\; '{print $1" "$2","}'

Wenn Ihnen das letzte Komma nicht gefällt, können Sie es folgendermaßen umschreiben:

 awk -F\; '{ if (NF != 2) print $1" "$2","; else  print $1" "$2;}'

Antwort4

Mit diesem Befehl:

awk '{sub(/;$/,",")sub(/;/," ")}1' file

Sie erhalten diese Ausgabe:

name_var type_var,
id string,
dt_depot string,
num_artc string

verwandte Informationen