Weitaus einfacher ist die Verwendung tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Dies funktioniert so, dass tr
zwei Argumente erforderlich sind - der zu ersetzende Zeichensatz und deren Ersetzung. In diesem Fall haben wir nur Sätze von 1 Zeichen. Wir leiten den stdin-Stream der input.csv
Eingabe tr
über den <
Shell-Operator um und leiten die resultierende Ausgabe weiter tr -d '"'
, um doppelte Anführungszeichen zu löschen.
Aber awk
kann es auch tun.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Die Funktionsweise ist etwas anders: awk liest jede Datei Zeile für Zeile, wobei jedes Inline-Skript verwendet wird /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Hier haben wir kein Muster, also bedeutet es, Codeblock für jede Zeile auszuführen. gsub()
Die Funktion wird für die globale Ersetzung innerhalb einer Zeile verwendet. Daher ersetzen wir damit Unterstriche durch Kommas und doppelte Anführungszeichen durch eine Nullzeichenfolge (wodurch das Zeichen effektiv gelöscht wird). Das 1
ist anstelle der Musterübereinstimmung mit dem fehlenden Codeblock, der standardmäßig einfach die Zeile druckt; Mit anderen Worten, der Codeblock mit gsub()
erledigt den Job und 1
druckt das Ergebnis.
Verwenden Sie die Shell-Umleitung ( >
), um die Ausgabe an eine neue Datei zu senden:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv