Ich muss einige relativ große Textdateien verketten, und ich würde es vorziehen, dies über die Befehlszeile zu tun. Leider habe ich nur Windows und kann keine neue Software installieren.
type file1.txt file2.txt > out.txt
ich kann fast bekommen, was ich will, aber ich möchte nicht, dass die erste Zeile von file2.txt in out.txt enthalten ist.
Mir ist aufgefallen, dass more
die Option +n
zur Angabe einer Startlinie hat, aber es ist mir nicht gelungen, diese zu kombinieren, um das gewünschte Ergebnis zu erhalten. 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, aber gibt es eine einfache Möglichkeit, dies über die Befehlszeile zu tun?
more +2 file2.txt > temp
type temp file1.txt > out.txt
oder Sie können copy
verwenden. Siehe copy /?
für mehr.
copy /b temp+file1.txt out.txt
Ich benutze das und es funktioniert gut für mich:
TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv
Natürlich müssen Sie vor jedem Lauf DELETE C:\Folder\ConcatenatedFile.csv
Das einzige Problem ist, dass wenn alle Dateien Kopfzeilen haben, diese in allen Dateien wiederholt werden.
Ich habe nicht genügend Reputationspunkte, um die Empfehlung zur Verwendung von *.csv >> ConcatenatedFile.csv
zu kommentieren, 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.
Verwenden Sie den Befehl FOR, um eine Datei Zeile für Zeile zu wiederholen, und mit der Option 'Überspringen' eine Reihe von Startzeilen.
FOR /F "skip=1" %i in (file2.txt) do @echo %i
Sie können die Ausgabe einer Batchdatei umleiten, die Folgendes enthält:.
FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i
Beachten Sie das doppelte%, wenn eine FOR-Variable in einer Batchdatei verwendet wird.
Ich würde dies in einem Kommentar zu ghostdog74 eingeben, außer dass meine Repräsentation zu niedrig ist, also hier .....more +2 file2.txt > temp
Dieser Code ignoriert tatsächlich die Zeilen 1 und 2 der Datei. OP möchte alle Zeilen der ersten Datei beibehalten (um die Kopfzeile beizubehalten), und dann die erste Zeile (vermutlich dieselbe Kopfzeile) in der zweiten Datei ausschließen. Um dies auszuschließen, sollte OP nur more +1
verwenden.
type temp file1.txt > out.txt
Es ist unklar, welche Reihenfolge sich aus diesem Code ergibt. Wird temp
an file1.txt
angehängt (wie gewünscht) oder file1.txt
an temp
angehängt (unerwünscht, da die Kopfzeile in der Mitte der resultierenden Datei eingebettet wäre) .
Außerdem erfordern diese Vorgänge bei großen Dateien (z. B. 300 MB) eine WIRKLICH LANGE ZEIT.
So gehen Sie vor:
(type file1.txt && more +1 file2.txt) > out.txt
Ich weiß, Sie sagten, dass Sie keine Software installieren könnten, aber ich bin mir nicht sicher, wie stark diese Einschränkung ist. Ich hatte sowieso das gleiche Problem (versuchte zwei Dateien mit vermutlich gleichen Headern zu verketten) und ich dachte, ich würde anderen, die auf diese Seite kommen, eine alternative Antwort geben, da es für mich einfach toll war.
Nachdem ich eine ganze Reihe von Befehlen in Windows ausprobiert und sehr frustriert war und auch alle möglichen grafischen Editoren ausprobiert hatte, die versprachen, große Dateien öffnen zu können Prompt. Zwei Befehle:
cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv
Für file1.csv
800MB und file2.csv
400MB benötigten diese beiden Befehle auf meinem Computer weniger als 5 Sekunden. In einer Cygwin-Ansage nicht weniger. Ich dachte, Linux-Befehle sollten in Cygwin langsam sein, aber dieser Ansatz war viel weniger Aufwand und war viel einfacher als jeder Windows-Ansatz, den ich finden konnte.
In Powershell:
Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt
Sie können dies auch einfach versuchen
type file2.txt >> file1.txt
Der Inhalt von file2.txt wird am Ende von file1.txt angehängt
Wenn Sie die Originaldatei file1.txt benötigen, machen Sie vorher eine Sicherung. Oder Sie können das tun
type file1.txt > out.txt
type file2.txt >> out.txt
Wenn Sie am Ende der ersten Datei einen Zeilenumbruch haben möchten, können Sie vor dem Anhängen den folgenden Befehl ausführen.
type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt
In der Hilfe zu copy
wird erläutert, dass Platzhalter verwendet werden können, um mehrere Dateien zu einer zu verknüpfen.
So kopieren Sie beispielsweise alle TXT-Dateien im aktuellen Ordner, die mit "abc" beginnen, in eine einzelne Datei mit dem Namen "xyz.txt":
copy abc*.txt xyz.txt