Ich muss einige relativ große Textdateien verketten und würde dies lieber über die Befehlszeile tun. Leider habe ich nur Windows und kann keine neue Software installieren.
type file1.txt file2.txt > out.txt
erlaubt mir fast zu bekommen, was ich will, aber ich möchte nicht, dass die erste Zeile von file2.txt in out.txt enthalten ist.
Ich habe festgestellt, dass more
es die +n
Option gibt, eine Startlinie anzugeben, aber ich habe es nicht geschafft, diese zu kombinieren, um das gewünschte Ergebnis zu erzielen. Ich bin mir bewusst, dass dies unter Windows möglicherweise nicht möglich ist, und ich kann out.txt immer von Hand bearbeiten, um die Zeile zu entfernen. Gibt es jedoch eine einfache Möglichkeit, dies über die Befehlszeile zu tun?
copy
Befehl ist viel schneller, setzt aber am Ende ein SUB-Zeichen. Gibt es eine Möglichkeit, dies zu vermeiden?copy /b *.txt combined.txt
ohne die Dateien einzeln auflisten zu müssen.type file1.txt temp > out.txt
, die zweite Datei tatsächlich ohne Header an die erste anzuhängenIch benutze das und es funktioniert gut für mich:
TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv
Natürlich muss man vor jedem Lauf
DELETE C:\Folder\ConcatenatedFile.csv
Das einzige Problem ist, dass wenn alle Dateien Header haben, dies in allen Dateien wiederholt wird.
quelle
Ich habe nicht genügend Reputationspunkte, um die zu verwendende Empfehlung zu kommentieren
*.csv >> ConcatenatedFile.csv
, aber ich kann eine Warnung hinzufügen:Wenn Sie eine
ConcatenatedFile.csv
Datei in demselben Verzeichnis erstellen , das Sie für die Verkettung verwenden, wird sie zu sich selbst hinzugefügt.quelle
Verwenden Sie den Befehl FOR, um eine Datei zeilenweise wiederzugeben, und verwenden Sie die Option 'Überspringen', um eine Reihe von Startzeilen zu übersehen ...
Sie könnten die Ausgabe einer Batch-Datei umleiten, die so etwas wie ...
Beachten Sie das doppelte%, wenn eine FOR-Variable in einer Batchdatei verwendet wird.
quelle
So geht's:
quelle
Ich würde dies in einen Kommentar zu ghostdog74 einfügen, außer dass mein Repräsentant zu niedrig ist.
more +2 file2.txt > temp
Dieser Code ignoriert tatsächlich die Zeilen 1 und 2 der Datei. OP möchte alle Zeilen aus der ersten Datei behalten (um die Kopfzeile beizubehalten) und dann die erste Zeile (vermutlich dieselbe Kopfzeile) in der zweiten Datei ausschließen, um nur die Kopfzeile auszuschließen, die OP verwenden sollte
more +1
.type temp file1.txt > out.txt
Es ist unklar, welche Reihenfolge sich aus diesem Code ergibt. Wird
temp
angehängt anfile1.txt
(wie gewünscht) oder wirdfile1.txt
angehängt antemp
(unerwünscht, da die Kopfzeile in der Mitte der resultierenden Datei vergraben würde).Darüber hinaus dauern diese Vorgänge bei großen Dateien (z. B. 300 MB) WIRKLICH LANGE.
quelle
Ich weiß, dass Sie gesagt haben, Sie könnten keine Software installieren, aber ich bin mir nicht sicher, wie streng diese Einschränkung ist. Wie auch immer, ich hatte das gleiche Problem (ich habe versucht, zwei Dateien mit vermutlich denselben Headern zu verketten) und dachte, ich würde eine alternative Antwort für andere geben, die auf diese Seite gelangen, da es für mich einfach großartig funktioniert hat.
Nachdem ich eine ganze Reihe von Befehlen in Windows ausprobiert hatte und sehr frustriert war und auch alle möglichen grafischen Editoren ausprobiert hatte, die versprachen, große Dateien öffnen zu können, aber dann nicht konnten, kehrte ich endlich zu meinen Linux-Wurzeln zurück und öffnete meinen Cygwin prompt. Zwei Befehle:
Bei
file1.csv
800 MB undfile2.csv
400 MB dauerten diese beiden Befehle auf meinem Computer weniger als 5 Sekunden. In einer Cygwin-Eingabeaufforderung nicht weniger. Ich dachte, Linux-Befehle sollten in Cygwin langsam sein, aber dieser Ansatz war weitaus weniger aufwendig und viel einfacher als jeder Windows-Ansatz, den ich finden konnte.quelle
In Powershell:
quelle
Sie können dies auch einfach versuchen
Der Inhalt von file2.txt wird am Ende von file1.txt angehängt
Wenn Sie die Originaldatei1.txt benötigen, erstellen Sie zuvor eine Sicherungskopie. Oder du kannst das tun
Wenn Sie am Ende der ersten Datei einen Zeilenumbruch wünschen, können Sie vor dem Anhängen den folgenden Befehl ausführen.
quelle
In der Hilfe zu wird
copy
erläutert, dass Platzhalter verwendet werden können, um mehrere Dateien zu einer zu verketten.So kopieren Sie beispielsweise alle TXT-Dateien im aktuellen Ordner, die mit "abc" beginnen, in eine einzelne Datei mit dem Namen xyz.txt:
quelle
quelle
Dies geschieht
Test.txt
mit Kopf- und anhängtTest1.txt
undTest2.txt
und schreibt ErgebnisseTestresult.txt
Datei nach dem Header aus zweiten und dritten Dateien bzw. Strippen:quelle