GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterstrich durch Komma ersetzen und doppelte Anführungszeichen in CSV entfernen

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:

  1. Ö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).

  2. Wählen Sie „Suchen und Ersetzen“ aus dem Menü (normalerweise unter „Bearbeiten“, wenn es kein separates „Suchen“-Menü gibt).

  3. Geben Sie _ ein in das Suchfeld und , in die Ersatzbox.

  4. Klicken Sie auf "Alle ersetzen".

  5. Wiederholen Sie dies mit " im Suchfeld und nichts im Ersetzungsfeld.

  6. 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.


Linux
  1. Wann sind doppelte Anführungszeichen erforderlich?

  2. Wie entkomme ich Zitaten in der Shell?

  3. Der Unterschied zwischen den Anführungszeichen „…“, „…“, $“…“ und „$“…“ in der Shell?

  4. Was ist der Unterschied zwischen Semikolon und doppeltem Ampersand &&?

  5. Was ist eine gute Mnemonik für Shell Double Vs. Einzelzitate?

WAZUH Erkennen und Entfernen von Malware – Virus Total-Integration

Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash Shell

Felder in der AWK-Skriptausgabe in doppelte Anführungszeichen setzen?

bash-Alias-Befehl mit einfachen und doppelten Anführungszeichen

Was ist Doppelpunkt (..) und Einzelpunkt (.) in Linux?

Entfernen von Dateien mit rm unter Verwendung von find und xargs