Ich habe 14 Dateien, die alle Teile eines Textes sind. Ich möchte sie zu einem zusammenführen. Wie geht das?
files
text-processing
Ivan
quelle
quelle
*
in "natürlicher" Reihenfolge ausdehnt . Wenn Sie "file1.txt ... file9.txt ... file14.txt" haben, funktioniert dies nicht, da file1? .Txt zwischen file1.txt und file2.txt sortiert. Sie müssten sie in "file01.txt ... file09.txt ... file14.txt" umbenennen. Sagenecho *
Sie, wenn Sie sich nicht sicher sind.numeric_glob_sort
Option einstellen ).Wenn sich Ihre Dateien nicht im selben Verzeichnis befinden, können Sie vor der Verkettung den Befehl find verwenden:
Sehr nützlich, wenn Ihre Dateien bereits bestellt sind und Sie sie zusammenführen möchten, um sie zu analysieren.
Tragbarer:
Dadurch wird möglicherweise die Dateireihenfolge beibehalten oder nicht.
quelle
"*.csv"
, da die Shell dann das Literal*
an übergeben würdefind
.Der Befehl
Tatsächlich hat dies den unerwünschten Nebeneffekt, dass "zusammengeführte Datei" in die Verkettung einbezogen wird und eine weggelaufene Datei erstellt wird. Um dies zu umgehen, schreiben Sie entweder die zusammengeführte Datei in ein anderes Verzeichnis.
oder verwenden Sie eine Musterübereinstimmung, bei der die zusammengeführte Datei ignoriert wird.
quelle
cat * > merged-file
funktioniert gut. Globs werden verarbeitet, bevor die Datei erstellt wird. Fallsmerged-file
bereits vorhanden, erkenntcat
(zumindest meine), dass es sich um die Ausgabedatei handelt, und lehnt es ab, sie zu lesen. WENN die Datei bereits existiert UND Sie die Umleitung später in der Pipeline haben, kann sie das offensichtlich nicht, und erst dann erhalten Sie die außer Kontrolle geratene Datei.cat
kann nicht erkennen, ob es sich bei der Datei um die Ausgabe handelt. Die Umleitung erfolgt in der Shell.cat
druckt nur auf stdout.Wie die anderen von hier sagen ... können Sie verwenden
cat
Sagen wir, Sie haben:
Und du willst nur
file01
zufile03
undfileA
zufileC
:Oder verwenden Sie die Klammererweiterung:
Oder mit einer schickeren Klammererweiterung:
Oder Sie können
for
Schleife verwenden:quelle
[01-03]
nicht als Globbing-Muster funktioniert.Sie können das
pattern
einer Datei angeben und dann alle wie folgt zusammenführen:quelle
Eine andere Option ist sed:
Oder...
Oder...
Oder ohne Weiterleitung ...
Beachten Sie, dass in der letzten Zeile auch merge.txt geschrieben wird (nicht wmerge.txt!). 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 angeben:
quelle