Ich habe eine TXT-Datei mit folgenden Nummern (in derselben Zeile):
106849_01373 106849_01967 106850_00082 23025.7_01059
Ich möchte sie so konvertieren:
106849_01373
106849_01967
106850_00082
23025.7_01059
Ich habe keine Ahnung, welchen Befehl ich verwenden soll. Kann mir jemand dabei helfen?
command-line
text-processing
Annemieke Smet
quelle
quelle
Ziemlich einfach mit
tr
:Beispiel:
quelle
heemayls Antwort ist der richtige Weg, aber hier ist eine Alternative mit Perl:
-l
: Aktiviert die automatische Zeilenendverarbeitung. Es hat zwei separate Effekte. Erstens wird bei Verwendung mit -n oder -p automatisch $ / (das Trennzeichen für Eingabedatensätze) geändert. Zweitens wird $ \ (das Trennzeichen für den Ausgabedatensatz) mit dem Wert octnum zugewiesen, sodass bei Druckanweisungen dieses Trennzeichen wieder hinzugefügt wird. Wenn octnum weggelassen wird, wird $ \ auf den aktuellen Wert von $ / gesetzt.-a
: Aktiviert den Autosplit-Modus, wenn er mit -n oder -p verwendet wird. Ein impliziter Split-Befehl für das @ F-Array wird als erstes in der impliziten while-Schleife ausgeführt, die von -n oder -p erzeugt wird.-n
: bewirkt, dass Perl die folgende Schleife um Ihr Programm annimmt, wodurch es über Dateinamenargumente wie sed -n oder awk iteriert:-e
: kann verwendet werden, um eine Programmzeile einzugeben;$,="\n"
: setzt das Ausgabefeldtrennzeichen auf eine neue Zeile;print(@F)
: Gibt die durch das Ausgabefeldtrennzeichen getrennten Felder aus.quelle
AWK
Ansatz. Grundsätzlich wird das Ausgabetrennzeichen für Felder geändert und eine Schleife erstellt. Die Testdatei ist Ihr Beispiel, das am Ende immer wieder mit ENDLINE eingefügt wirdquelle
Verwenden von
sed
:quelle
Ich füge nur zum Spaß eine Python-Lösung hinzu:
Dieser Befehl führt das einzeilige Python 3-Skript in einfachen Anführungszeichen mit dem Dateinamen aus, den Sie am Ende als Argument konvertieren möchten. Die Syntax lautet wie folgt:
Das 1-Zeilen-Skript, das wir verwenden, ist das folgende (aus Gründen der Übersichtlichkeit auf mehrere Zeilen erweitert):
Es importiert das
sys
Modul zum Lesen von Befehlszeilenargumenten, nimmt das erste angegebene Argument als Dateinamen zum Öffnen und druckt jeden durch Leerzeichen getrennten Datenblock aus der Datei in einer einzelnen Zeile.quelle