it-swarm.com.de

Verketten Sie Textdateien mit der Windows-Befehlszeile und lassen Sie die Führungslinien fallen

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?

122
James
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
132
ghostdog74

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.

61
Raj More

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.

21
John Faughnan

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.

6
Alberto Rossini

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.

3
Brian D

So gehen Sie vor:

(type file1.txt && more +1 file2.txt) > out.txt
2
Waldo

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.

2
Andrew Mao

In Powershell:

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt
1
JaR

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
0
Hamed

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
0
GaTechThomas