Der weitaus einfachere Weg ist die Verwendung von tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Das funktioniert folgendermaßen:tr
nimmt zwei Argumente - eine Menge von Zeichen, die ersetzt werden sollen, und ihre Ersetzung. In diesem Fall haben wir nur Sätze von 1 Zeichen. Wir leiten input.csv
um geben Sie tr
ein 's stdin stream über <
Shell-Operator und leiten Sie die resultierende Ausgabe an tr -d '"'
weiter um doppelte Anführungszeichen zu löschen.
Aber awk
kann das auch.
$ 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 /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
ist . 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 verwenden wir sie, um Unterstriche durch Kommas und doppelte Anführungszeichen durch eine Nullzeichenfolge zu ersetzen (wodurch das Zeichen effektiv gelöscht wird). Die 1
steht anstelle des Mustervergleichs mit fehlendem Codeblock, der standardmäßig einfach die Zeile druckt; also 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
Alternativ können Sie auch diesen sed
verwenden Befehl:
$ sed -e 's/_/,/g' -e 's/"//g' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Das kann auch Perl, die "Schweizer Kettensäge" der Kommandozeilen-Textverarbeitung. Die Syntax ist (nicht zufällig) der tr
sehr ähnlich und sed
Beispiele:
perl -pe 'tr/_"/,/d' input.csv > result.csv
oder:
perl -pe 's/_/,/g; s/"//g' input.csv > result.csv
Aber ehrlich gesagt, wenn Sie sich nicht die Zeit nehmen wollen, eine neue Programmiersprache (was wirklich awk, Perl und sed und andere Tools wie sie sind) nur für diese grundlegende Aufgabe zu lernen, können Sie es genauso gut tun jeder Texteditor, der Suchen und Ersetzen unterstützt:
-
Öffnen Sie die CSV-Datei in Ihrem bevorzugten Texteditor (z. B. gedit, kate, mousepad usw.; sogar das einfache alte Notepad oder Wordpad unter Windows kann dies tun).
-
Wählen Sie „Suchen und Ersetzen“ aus dem Menü (normalerweise unter „Bearbeiten“, wenn es kein separates „Suchen“-Menü gibt).
-
Geben Sie
_
ein in das Suchfeld und,
in die Ersatzbox. -
Klicken Sie auf "Alle ersetzen".
-
Wiederholen Sie dies mit
"
im Suchfeld und nichts im Ersetzungsfeld. -
Speichern Sie die Datei.
Wenn Sie dies jetzt für 100 oder 1000 Dateien statt nur für eine tun müssen, dann macht das Erlernen eines neuen Befehlszeilentools Sinn. Und wenn Sie einmal wissen, wie man Perl oder sed oder was auch immer benutzt, dann sparen Sie natürlich viel Zeit und Mühe mit ähnlichen Aufgaben später. Aber für nur eine einmalige Aufgabe, die Sie voraussichtlich nicht noch einmal erledigen müssen, ist manchmal ein einfaches interaktives Tool wie ein Texteditor die einfachste Lösung.