
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 sed
Ersetzung:
$ 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 awk
verwenden, 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 awk
so 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