Ich möchte alle Zeilen eines Textes zu einer Zeile zusammenfassen. Ich bin ein Anfänger im Programmieren und versuche dabei zu lernen. Ich habe vier Stunden damit verbracht, dieses Problem zu lösen. Ich weiß, dass es für dieses Problem eine einfache Lösung gibt. Folgendes habe ich versucht.
sed -e 'N; s / \ n //' myfile.txt #Tut nichts sed -e: a -e N -es / \ n / / '-e ta myfile.txt #output alles durcheinander und ich kann weder Kopf noch Schwanz der Syntax machen Katze myfile.txt | tr -d '\ n'> myfile.txt # Löscht alle Zeilen
Hier ist die Textdatei:
500212 262578-4-4 23200 GRIFFITH LABORATORIES LTD GRIFFITH LABORATORIES SÜDDUBLIN COUNTY COUNCIL BÜRO BÜRO (INDUSTRIE) Liste bewertbar 2 Industriegebiet von Pineview Firhouse Road Knocklyon 31. Dezember 2007 1. Januar 2008 "
Ich kann nicht herausfinden, wo ich falsch gelaufen bin ...
cat reval_details.asp?Pno=500211.txt | tr -d '\n' > new_reval_details.asp?Pno=500211.txt
tr -d '\n' <input.txt > output.txt
, die nutzlose Verwendung von Katze zu vermeiden und eine unnötige Pfeife weniger zu verwenden.Hier ist es. Es ist eine andere Lösung und einfach einfach.
quelle
echo `cat Input.txt` > Output.txt
funktioniert auch, nur eine andere varienttr
Lösung.EINFACHE METHODE
Eine andere Methode mit awk,
Ausgabe:
Hinweis:
ORS = '' -> Dies ist Ihr Feldtrennzeichen. Zwischen den einzelnen Anführungszeichen können beliebige Zeichen als Feldtrennzeichen stehen. Mit dieser awk-Methode können wir Leerzeichen und alle Zeichen einfügen.
Hoffe das könnte helfen!
quelle
man awk
Es ist nicht erforderlich, das Etikett
:a
außerhalb der Hauptanweisung anzubringen, und es wird auch nicht die-e
erforderliche Option benötigt. Schließlich ist das/$/
überflüssig (jede Zeile hat einen EOL-Charakter).Verbessert man andere Antworten, bekommt man
Was ist klarer, wenn wie folgt geschrieben,
Der Befehl funktioniert wie folgt:
N
fügt die nächste Zeile an den (mehrzeiligen) Musterraum an, der bereits die aktuelle Zeile enthält;s/\n/ /
Ersetzen Sie das von\n
erzeugte Zeilenumbruchzeichen durchN
ein Leerzeichen.
ta
wechselt in die dem Label folgende Skriptzeile:a
, solange die Ersetzung in Schritt 2 erfolgreich war , dh wenn die Ersetzung stattgefunden hat, springt die Ausführung zu Schritt 1, ohne das Ende des Skripts zu "treffen", dh ohne eine andere Eingabezeile zu lesen.Beachte das Folgende;
sed
Liest die Zeilen der Eingabedatei nacheinander ab der ersten Zeile .:a
ist nur ein Label, kein auszuführender Befehl;N
wird grundsätzlich auf jeder Zeile ausgeführt, abers/\n/ /
(im Prinzip auf jeder Zeile ausgeführt) erfolgreich ist auf jeder Linie , aber die letzten , sota
macht das Ende des Skripts nur dann erreichbar , wenn die letzte Eingabezeile gelesen wird (die einzige Zeile, in der eins
Fehler auftritt)p
Befehl wird ausgeführt.Das Skript liest also im Grunde genommen die erste Eingabezeile ein und fügt die folgenden Zeilen nacheinander hinzu, wobei die neue Zeile jedes Mal durch ein Leerzeichen ersetzt wird. Nachdem die letzte Zeile angehängt wurde (und
\n
in einem Leerzeichen geändert wurde),N
kann keine Zeile angehängt werden,s
schlägt fehl,ta
wird übersprungen, das Ende des Skripts wird erreicht und die implizitep
rint-Anweisung wird für das aktuelle mehr als einzeilige Muster ausgeführt .Die
-i
Option ersetzt die Eingabedateifile
durch den gesamten einzeiligen Musterbereich.quelle
GEDIT:
Suchen und durch
\n
ein Leerzeichen '' ersetzen .Sie können das Ersetzen-Fenster über 'Suchen' -> 'Ersetzen'
oder über die Tastenkombination Ctrl+ aufrufenH
Siehe Screenshot unten:
Ihr Originaltext befindet sich in den Zeilen 1-14.
Das Ergebnis steht in Zeile 16.
quelle
Ich denke, der einfachste Weg, dies zu tun, ist:
http://ss64.com/bash/paste.html
quelle
Versuche dies
http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/
quelle
Ich glaube, Sie haben einfach vergessen, dass Sie sed anweisen mussten, die Ausgabe von yourfile.txt auf das gewünschte Ergebnis, newfile.txt, umzuleiten. Dies scheint der Befehl , den Sie brauchen, sondern nur , wenn die Dateien , die Sie merge versuchen , nicht zu groß sind für Puffer sed ist:
sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt
. Ein weiteres Forum , in dem die Fähigkeiten von sed diskutiert werden. Ich habe den Befehl getestet und es hat bei mir funktioniert.quelle
-i
Schalter die ursprüngliche Datei inline , sodass keine Ausgabe in eine andere Datei erforderlich ist. Sei aber vorsichtig!a' sed -i :a -e N -i 's/\n/ /' -e ta reval_details.asp?Pno=500214.txt sed: can't find label for jump to
einem' sed -e: a -e N -i 's / \ n / /' -e ta reval_details kann nicht gefunden werden .asp? Pno = 500214.txt sed: kann s / \ n / / nicht lesen: Keine solche Datei oder Verzeichnis #Alle Ideen.Reine bash Lösung:
quelle
Wenn ich es wäre, würde ich es einfach in vim öffnen und ein paar Mal Shift+ drücken J.
quelle
Geben Sie in vim ein und drücken Sie die Eingabetaste:
quelle
Python-Ansatz:
AWK:
quelle