wake-up-neo.net

So fügen Sie Inhalte mehrerer Dateien zu einer Datei hinzu

Ich möchte den Inhalt von fünf Dateien unverändert in eine Datei kopieren. Ich habe versucht, es mit cp für jede Datei zu tun. Dadurch wird jedoch der Inhalt überschrieben, der aus der vorherigen Datei kopiert wurde. Ich habe es auch versucht

paste -d "\n" 1.txt 0.txt

und es hat nicht funktioniert.

Ich möchte, dass mein Skript die neue Zeile am Ende jeder Textdatei hinzufügt.

z.B. Dateien 1.txt, 2.txt, 3.txt. Gib den Inhalt von 1,2,3 in 0.txt ein

Wie mache ich es ?

151
Steam

Sie benötigen den Befehl cat (Abkürzung für Concatenate) mit Shell-Umleitung (>) in Ihrer Ausgabedatei

cat 1.txt 2.txt 3.txt > 0.txt
276
radical7

Eine andere Option für diejenigen unter Ihnen, die immer noch wie ich über diesen Beitrag stolpern, ist die Verwendung von find -exec:

find . -type f -name '*.txt' -exec cat {} + >> output.file

In meinem Fall brauchte ich eine robustere Option, die mehrere Unterverzeichnisse durchblätterte, also entschied ich mich für die Verwendung von find. Brechen sie ab:

find .

Suchen Sie im aktuellen Arbeitsverzeichnis.

-type f

Nur an Dateien interessiert, nicht an Verzeichnissen usw.

-name '*.txt'

Verfeinern Sie die Ergebnismenge mit dem Namen

-exec cat {} +

Führen Sie den Befehl cat für jedes Ergebnis aus. "+" bedeutet, dass nur 1 Instanz von cat erzeugt wird (thx @gniourf_gniourf)

 >> output.file

Hängen Sie, wie in anderen Antworten erläutert, den Inhalt der Kategorie an das Ende einer Ausgabedatei an.

89
mopo922

wenn Sie einen bestimmten Ausgabetyp haben, machen Sie so etwas

cat /path/to/files/*.txt >> finalout.txt
40
Eswar Yaganti

Wenn sich alle Ihre Dateien in einem einzigen Verzeichnis befinden, können Sie dies einfach tun

cat * > 0.txt

Dateien 1.txt, 2.txt, .. werden in 0.txt verschoben

16
Pooja
for i in {1..3}; do cat "$i.txt" >> 0.txt; done

Ich habe diese Seite gefunden, weil ich 952 Dateien zu einer zusammenfügen musste. Ich fand, dass dies viel besser funktioniert, wenn Sie viele Dateien haben. Dies führt eine Schleife für so viele Zahlen durch, wie Sie benötigen, und katze jede mit >> an das Ende von 0.txt.

9
freddythunder

Wenn alle Ihre Dateien einen ähnlichen Namen haben, können Sie einfach Folgendes tun:

cat *.log >> output.log
6
AeaRy

Eine andere Option ist sed:

sed r 1.txt 2.txt 3.txt > merge.txt 

Oder...

sed h 1.txt 2.txt 3.txt > merge.txt 

Oder...

sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here

Oder ohne Weiterleitung ...

sed wmerge.txt 1.txt 2.txt 3.txt

Beachten Sie, dass in der letzten Zeile auch merge.txt (nicht wmerge.txt!) Geschrieben wird. Sie können w"merge.txt" verwenden, um Verwechslungen mit dem Dateinamen zu vermeiden, und -n für die stille Ausgabe.

Natürlich können Sie die Dateiliste auch mit Platzhaltern kürzen. Beispielsweise können Sie bei nummerierten Dateien wie in den obigen Beispielen den Bereich in geschweiften Klammern wie folgt angeben:

sed -n w"merge.txt" {1..3}.txt
4
Fran

Wenn die Originaldatei nicht druckbare Zeichen enthält, gehen diese bei Verwendung des Befehls cat verloren. Mit 'cat -v' werden die nicht druckbaren Zeichen in sichtbare Zeichenfolgen konvertiert, aber die Ausgabedatei enthält immer noch nicht die tatsächlichen nicht druckbaren Zeichen in der Originaldatei. Bei einer geringen Anzahl von Dateien kann eine Alternative darin bestehen, die erste Datei in einem Editor (z. B. vim) zu öffnen, der nicht druckbare Zeichen verarbeitet. Gehen Sie dann zum Ende der Datei und geben Sie ": r zweiter_Dateiname" ein. Dadurch wird die zweite Datei mit nicht druckbaren Zeichen eingezogen. Das gleiche könnte für zusätzliche Dateien gemacht werden. Wenn alle Dateien eingelesen wurden, geben Sie ": w" ein. Das Endergebnis ist, dass die erste Datei jetzt das enthält, was sie ursprünglich getan hat, plus den Inhalt der Dateien, die eingelesen wurden.

2
B.A.Cooper

wenn Ihre Dateien Header enthalten und Sie diese in der Ausgabedatei entfernen möchten, können Sie Folgendes verwenden:

for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
2
brunocrt

Wenn Sie den Inhalt von 3 Dateien in eine Datei einfügen möchten, ist der folgende Befehl eine gute Wahl:

cat file1 file2 file3 | tee -a file4 > /dev/null

Es kombiniert den Inhalt aller Dateien in Datei4 und gibt die Konsolenausgabe an /dev/null aus.

1
Ajit K'sagar