Ich habe eine riesige Textdatei, die so aussieht:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,8
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,12
Die gewünschte Ausgabe ist folgende:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12
Ich habe andere relevante Beiträge hier und in anderen Communities ausprobiert, konnte aber nicht genau das bekommen, was ich will.
AKTUALISIEREN
Dies ist die Quer Frage (Ich wollte beide Unix / Perl Antworten und Batch / Powershell Lösungen für diese.) , Die interessanten Antworten hat.
"1 2 3 4" | awk '{$2=$2;print $0}'
ergibt:1 2 3 4
(nur noch 1 Leerzeichen (oder OFS) zwischen den Feldern). ex2)echo "1,,,2,3,,,,4" | awk -F',' '{$2=$2;print $0}'
gibt:1 2 3 4
(Kommas wurden Leerzeichen). Es könnte andere Nebenwirkungen geben. Testen Sie einen anderen Ansatz (z. B. gsub für eine Kopiervariable von $ 0), wenn die Zuweisung eines Feldes nachteilige Nebenwirkungen hat.Sie können versuchen, Folgendes zu verwenden
awk
:quelle
Hier ist Perl-Lösung:
Das
-a
Flag ermöglicht es uns, Eingaben als Array zu behandeln, basierend auf dem mit angegebenen Trennzeichen-F
. Grundsätzlich ändern wir das letzte Element in diesem Array und erstellen es perjoin
Befehl neu.quelle
sprintf
ist aber immer noch die Kernidee Ihrer Antwort. Nicht wie wenn es nicht richtig ist, nur nicht etwas anderes als akzeptierte Antwort anbieten. +1 sowieso.sprintf()
er normalerweise beim Schreiben einer Zeichenfolge eines bestimmten Formats in eine Variable verwendet wird, weshalb er in vielen anderen Sprachen verwendet wird. Ich kann es auch in Python schreiben - Python hat es nicht,sprintf()
aber die Kernidee wird unabhängig davon dieselbe sein - formatierte Zeichenfolge in eine Variable schreiben. Alternativ können wir Array-Elemente direkt bearbeiten und diese einfach ausdrucken. Mit dieser Art von Fragen gibt es eine endliche Anzahl von Lösungen, im Grunde ist das, was ich zu sagen versucheMit Eingabedaten wie:
in text.csv
den Code unten
erzeugt Ausgabe wie:
quelle
Tcl
Hier ist meine Lösung, die mit Tcl erstellt wurde, das aus der Datei input.csv liest und das Ergebnis in die Datei output.csv einfügt
Demonstration
quelle