Nối các tệp văn bản với dòng lệnh Windows, bỏ các dòng hàng đầu


127

Tôi cần nối một số tệp văn bản tương đối lớn và muốn thực hiện điều này thông qua dòng lệnh. Thật không may, tôi chỉ có Windows và không thể cài đặt phần mềm mới.

type file1.txt file2.txt > out.txt

cho phép tôi gần như có được những gì tôi muốn, nhưng tôi không muốn dòng 1 của tệp2.txt được đưa vào out.txt.

Tôi đã nhận thấy rằng more+ntùy chọn chỉ định một dòng bắt đầu, nhưng tôi đã không quản lý để kết hợp những thứ này để có được kết quả mà tôi muốn. Tôi biết rằng điều này có thể không thực hiện được trong Windows và tôi luôn có thể chỉnh sửa out.txt bằng tay để thoát khỏi dòng, nhưng có cách nào đơn giản để thực hiện từ dòng lệnh không?

Câu trả lời:


136
more +2 file2.txt > temp
type temp file1.txt > out.txt

hoặc bạn có thể sử dụng copy. Xem copy /?để biết thêm.

copy /b temp+file1.txt  out.txt

4
Tất nhiên! Tôi đã muốn tránh sử dụng các tập tin tạm thời mặc dù. Tôi đã cố gắng sử dụng dấu ngoặc đơn, đường ống và <để đưa nó vào một lệnh, nhưng không thể đi đến đâu được. Các copylệnh là nhanh hơn nhiều, nhưng nó đặt một nhân vật SUB ở cuối. Có cách nào để tránh điều này không?
James

18
Tôi sẽ thêm rằng nếu bạn muốn nối TẤT CẢ các tệp bạn có thể làm copy /b *.txt combined.txtmà không phải liệt kê các tệp riêng lẻ.
Phlucious

1
dường như chuyển đổi tab thành không gian, đáng tiếc!
Antonio

Có lệnh nào để lấy các tập tin gốc từ các tập tin hợp nhất không?
hoán đổi gandhi

3
@ ghostdog74: Tôi nghĩ rằng nó type file1.txt temp > out.txtphải thực sự nối thêm tệp thứ hai, không có tiêu đề cho tệp đầu tiên
Marius

61

Tôi sử dụng cái này và nó hoạt động tốt với tôi:

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

Tất nhiên, trước mỗi lần chạy, bạn phải DELETE C:\Folder\ConcatenatedFile.csv

Vấn đề duy nhất là nếu tất cả các tệp có tiêu đề, thì nó sẽ được lặp lại trong tất cả các tệp.


2
Khi tôi nhập tên tệp cho tệp được nối, có nghĩa là nó được liệt kê ở phần cuối của tệp theo thứ tự (thứ tự chữ cái), thì các cửa sổ dường như được nối hai lần! Tôi đã kết thúc bằng cách sử dụng tên tệp là 1filename.csv để không gặp sự cố. Tôi đoán việc giấu vào một thư mục khác cũng sẽ hoạt động ...
SebK

1
Nếu bạn sử dụng> thay vì >>, bạn không phải xóa tệp trước. > chuyển hướng đầu ra và tạo tập tin mới mỗi lần. >> chuyển hướng đầu ra và nối thêm.
Eddie Deyo

1
Làm thế nào để bỏ qua dòng đầu tiên trong tệp2, mà OP đã hỏi về?
Dan Dascalescu

1
Nó không bỏ qua dòng đầu tiên trong file2. Tôi đã bỏ lỡ một phần của câu hỏi.
Raj Thêm

1
Có lệnh nào để lấy các tập tin gốc từ các tập tin hợp nhất không?
hoán đổi gandhi

21

Tôi không có đủ điểm danh tiếng để nhận xét về đề xuất sử dụng *.csv >> ConcatenatedFile.csv , nhưng tôi có thể thêm cảnh báo:

Nếu bạn tạo ConcatenatedFile.csvtập tin trong cùng thư mục mà bạn đang sử dụng để ghép, nó sẽ được thêm vào chính nó.


2
Làm thế nào để bỏ qua dòng đầu tiên trong tệp2, mà OP đã hỏi về?
Dan Dascalescu

6

Sử dụng lệnh FOR để lặp lại một dòng tệp theo dòng và với tùy chọn 'bỏ qua' để bỏ lỡ một số dòng bắt đầu ...

FOR /F "skip=1" %i in (file2.txt) do @echo %i

Bạn có thể chuyển hướng đầu ra của một tệp bó, chứa thứ gì đó như ...

FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i

Lưu ý% kép khi biến FOR được sử dụng trong tệp bó.


4

Đây là cách để làm điều này:

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

3

Tôi sẽ đưa điều này trong một bình luận cho ghostdog74, ngoại trừ đại diện của tôi quá thấp, vì vậy hãy đến đây.

more +2 file2.txt > temp
Mã này sẽ thực sự bỏ qua các hàng 1 và 2 của tệp. OP muốn giữ tất cả các hàng từ tệp đầu tiên (để duy trì hàng tiêu đề), sau đó loại trừ hàng đầu tiên (có lẽ là cùng một hàng tiêu đề) trên tệp thứ hai, do đó, chỉ loại trừ hàng tiêu đề mà OP nên sử dụng more +1.

type temp file1.txt > out.txt

Không rõ kết quả thứ tự từ mã này. Được tempgắn vào file1.txt(như mong muốn) hoặc được file1.txtthêm vào temp(không mong muốn vì hàng tiêu đề sẽ được chôn ở giữa tệp kết quả).

Ngoài ra, các thao tác này mất THỜI GIAN THỰC SỰ với các tệp lớn (ví dụ: 300MB)


2

Tôi biết bạn nói rằng bạn không thể cài đặt bất kỳ phần mềm nào, nhưng tôi không chắc sự hạn chế đó chặt chẽ đến mức nào. Dù sao, tôi cũng gặp vấn đề tương tự (cố gắng ghép hai tệp có cùng tiêu đề) và tôi nghĩ tôi sẽ cung cấp câu trả lời thay thế cho những người khác đến trang này, vì nó hoạt động rất tốt cho tôi.

Sau khi thử một loạt các lệnh trong windows và bị thất vọng nặng nề, và cũng thử tất cả các loại trình soạn thảo đồ họa hứa hẹn có thể mở các tệp lớn, nhưng sau đó không thể, cuối cùng tôi đã lấy lại được gốc Linux của mình và mở Cygwin của tôi lời nhắc. Hai lệnh:

cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv

Đối với file1.csv800MB và file2.csv400MB, hai lệnh đó mất dưới 5 giây trên máy của tôi. Trong một dấu nhắc Cygwin, không ít. Tôi nghĩ rằng các lệnh Linux được cho là chậm trong Cygwin nhưng cách tiếp cận đó tốn ít công sức hơn và dễ dàng hơn bất kỳ cách tiếp cận cửa sổ nào tôi có thể tìm thấy.


1

Trong quyền hạn:

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

0

Bạn cũng có thể đơn giản thử điều này

type file2.txt >> file1.txt

Nó sẽ nối thêm nội dung của file2.txt vào cuối file1.txt

Nếu bạn cần file1.txt gốc, hãy sao lưu trước. Hoặc bạn có thể làm điều này

type file1.txt > out.txt
type file2.txt >> out.txt

Nếu bạn muốn ngắt dòng ở cuối tệp đầu tiên, bạn có thể thử lệnh sau trước khi nối thêm.

type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt

0

Trợ giúp để copygiải thích rằng các ký tự đại diện có thể được sử dụng để ghép nhiều tệp thành một.

Ví dụ: để sao chép tất cả các tệp .txt trong thư mục hiện tại bắt đầu bằng "abc" vào một tệp có tên xyz.txt:

copy abc*.txt xyz.txt

-1
more +2 file1.txt > type > out.txt && type file2.txt > out.txt

-1

Điều này có Test.txtvới các tiêu đề và nối thêm Test1.txtTest2.txtghi kết quả vào Testresult.txttệp sau khi tước tiêu đề từ các tệp thứ hai và thứ ba tương ứng:

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.