Ich habe die folgenden Daten, und ich muss alles in einer Zeile zusammenfassen.
Ich habe das:
22791
;
14336
;
22821
;
34653
;
21491
;
25522
;
33238
;
Ich brauche das:
22791;14336;22821;34653;21491;25522;33238;
Keiner dieser Befehle funktioniert einwandfrei.
Die meisten lassen die Daten so aussehen:
22791
;14336
;22821
;34653
;21491
;25522
tr -d '\n' < yourfile.txt
Bearbeiten:
Wenn keiner der hier veröffentlichten Befehle funktioniert, haben Sie etwas anderes als einen Zeilenumbruch, der Ihre Felder trennt. Möglicherweise haben Sie DOS/Windows-Zeilenenden in der Datei (obwohl ich davon ausgehen würde, dass die Perl-Lösungen auch in diesem Fall funktionieren)?
Versuchen:
tr -d "\n\r" < yourfile.txt
Wenn dies nicht funktioniert, müssen Sie Ihre Datei genauer untersuchen (z. B. in einem Hex-Editor), um herauszufinden, welche Zeichen sich tatsächlich darin befinden, die Sie entfernen möchten.
Perl -p -i -e 's/\R//g;' filename
Muss den Job machen.
paste -sd "" file.txt
benutzen
head -n 1 filename | od -c
um herauszufinden, WAS ist das beleidigende Zeichen . verwenden Sie dann
tr -d '\n' <filename
für LF
tr -d '\r\n' <filename
für CRLF
tr -d '\n' < file.txt
Oder
awk '{ printf "%s", $0 }' file.txt
Oder
sed ':a;N;$!ba;s/\n//g' file.txt
Diese Seite hier hat eine Reihe anderer Methoden, um Zeilenumbrüche zu entfernen.
bearbeitet, um Katzenmissbrauch zu entfernen :)
Sie können die Datei in vim bearbeiten:
$ vim inputfile
:%s/\n//g
Nerd-Fakt: Verwenden Sie stattdessen ASCII.
tr -d '\012' < filename.extension
(Redigiert, weil ich die verdammte Antwort nicht sah, die die gleiche Lösung hatte, der einzige Unterschied bestand darin, dass meine ASCII-Zeichen hatte)
Wenn die Daten in file.txt sind, dann:
echo $(<file.txt) | tr -d ' '
Die '$(<file.txt)
' liest die Datei und gibt den Inhalt als eine Reihe von Wörtern an, die 'echo' mit einem Leerzeichen zwischen ihnen widerhallen. Der Befehl 'tr' löscht dann alle Leerzeichen:
22791;14336;22821;34653;21491;25522;33238;
xargs
verwendet auch Zeilenumbrüche (fügt jedoch einen abschließenden Zeilenumbruch hinzu):
xargs < file.txt | tr -d ' '
Verwenden des gedit-Texteditors (3.18.3)
\n\s
in das Feld Find einHinweis: Das ursprüngliche 7-jährige Problem des OP wird nicht genau angesprochen, es sollte jedoch einigen Noob-Linux-Benutzern (wie mir) helfen, die ihren Weg von den SEs mit ähnlichen Fragen finden .
Hatte heute den gleichen Fall, sehr einfach in vim oder nvim. Sie können gJ
verwenden, um Linien zu verbinden. Für Ihren Anwendungsfall einfach tun
99gJ
dadurch werden alle 99 Zeilen verbunden. Sie können die Nummer 99
je nach Anzahl der zu verbindenden Zeilen anpassen. Wenn Sie einfach 1 line zusammenfügen, ist nur gJ
gut genug.
Mit man 1 ed:
# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed
ed -s file <<< $'1,$j\n,p' # print to stdout
ed -s file <<< $'1,$j\nwq' # in-place edit
Angenommen, Sie möchten nur die Ziffern und die Semikolons beibehalten, sollten die folgenden Schritte ausreichen, wenn Sie keine größeren Codierungsprobleme haben, obwohl dies auch den letzten "Zeilenumbruch" entfernt:
$ tr -cd ";0-9"
Sie können das Obige leicht ändern, um andere Zeichen, z. wenn Sie Dezimalpunkte, Kommas usw. beibehalten möchten.
Entfernen Sie auch den abschließenden Zeilenumbruch am Ende der Datei
python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
$ Perl -0777 -pe 's/\ n + // g' input> -Ausgabe
$ Perl -0777 -pe 'tr/\ n // d' input> -Ausgabe
Dadurch werden alle Zeilen entfernt, die nur Leerzeichen enthalten (Leerzeichen und Tabulatoren).
sed '/^[[:space:]]*$/d'
Nehmen Sie einfach das, womit Sie arbeiten, und leiten Sie es weiter
cat filename | sed '/^[[:space:]]*$/d'
Sie vermissen die offensichtlichste und schnellste Antwort, besonders wenn Sie dies in der GUI tun müssen, um einen seltsamen Zeilenumbruch zu korrigieren.
Öffne gedit
Dann Ctrl + HGeben Sie dann in das Find
Textfeld \n
und in das Replace with
ein Leerzeichen ein und füllen Sie das Kontrollkästchen Regular expression
und voila aus.
Normalerweise bekomme ich diese Anwendung, wenn ich ein Code-Snippet aus einer Datei kopiere und es in eine Konsole einfügen möchte, ohne unnötig neue Zeilen hinzufügen zu müssen. Am Ende habe ich einen Bash-Alias verwendet
(Ich nannte es oneline
, wenn Sie neugierig sind)
xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
xsel -b -o
liest meine Zwischenablage
tr -d '\n'
entfernt neue Zeilen
tr -s ' '
entfernt wiederkehrende Leerzeichen
xsel -b -i
schiebt dies zurück in meine Zwischenablage
danach würde ich den neuen Inhalt der Zwischenablage in oneline in einer Konsole oder was auch immer einfügen.
Ich würde es mit awk tun, z.
awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt
(Ein Nachteil ist, dass a im Speicher "angesammelt" wird).
BEARBEITEN
Ich habe Printf vergessen! Desweiteren
awk '/[0-9]+/ { printf "%s;", $0 }' file.txt
oder wahrscheinlich besser, was es bereits in den anderen ans gegeben wurde, die awk verwenden.