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
Alternativ können Sie auch diesen
sed
Befehl verwenden:quelle
Perl, die "Schweizer Kettensäge" der Kommandozeilen-Textverarbeitung, kann dies ebenfalls. Die Syntax ist (nicht zufällig) der
tr
undsed
-Beispiele ziemlich ähnlich :oder:
Aber ehrlich gesagt, wenn Sie sich nicht die Zeit nehmen möchten, eine neue Programmiersprache zu lernen (was wirklich awk, Perl und sed und andere Tools wie diese sind), nur für diese grundlegende Aufgabe, können Sie dies genauso gut tun Jeder Texteditor, der das Suchen und Ersetzen unterstützt:
Öffnen Sie die CSV-Datei in Ihrem bevorzugten Texteditor (z. B. gedit, kate, mousepad usw .; dies kann auch mit einem einfachen alten Editor oder Wordpad unter Windows geschehen).
Wählen Sie "Suchen und Ersetzen" aus dem Menü (normalerweise unter "Bearbeiten", wenn es kein separates "Suchen" -Menü gibt).
Geben Sie
_
in das Suchfeld und,
in das Ersatzfeld ein.Klicken Sie auf "Alle ersetzen".
Wiederholen Sie mit
"
im Suchfeld und nichts im Ersatzfeld.Speicher die Datei.
Wenn Sie dies für 100 oder 1000 Dateien anstatt nur für eine tun müssen, ist das Erlernen eines neuen Befehlszeilentools sinnvoll. Und wenn Sie erst einmal wissen, wie man Perl oder sed oder was auch immer verwendet, sparen Sie später viel Zeit und Mühe mit ähnlichen Aufgaben. Aber für nur einen einmaligen Job, von dem Sie nicht erwarten, dass er erneut ausgeführt werden muss, ist manchmal ein einfaches interaktives Tool wie ein Texteditor die einfachste Lösung.
quelle
Sie könnten dies auch mit tun
vim
.Öffnen Sie die Datei:
vim input.csv
und verwenden Sievim
das erweiterte Suchwerkzeugs
. Geben Sie Doppelpunkt (:
) ein, um in den Befehlsmodus zu gelangen, und führen Sie folgende Befehle aus:Ziemlich die gleichen Befehle wie in IanCs Antwort, aber innerhalb von
vim
anstatt zu verwendensed
.quelle
Warum nicht einfach die Standardwerte der Separatorwerte für Eingabe und Ausgabe ändern?
quelle