Hợp nhất ba tệp vào một tệp chính bằng cách loại trừ tiêu đề trong tệp thứ 2 và thứ 3


8

Tôi có ba tệp với n số dòng như dưới đây

mẫu1.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
.
.
.

Sample2.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
.
.
.

Sample3.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick
.
.
.

Tôi cần hợp nhất ba tệp này trong một tệp (Master.txt) bằng cách loại trừ các tiêu đề (3 dòng đầu tiên) trong Sample2.txt và Sample3.txt như được đưa ra dưới đây

Sản phẩm chất lượng

$cat Master.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick

Lưu ý: Trong máy AIX có Ksh 88


4
Điều này có lẽ được thực hiện tốt nhất theo chương trình. Có thể sử dụng Python và Perl. Nếu bạn đang làm những việc như vậy thường xuyên, bạn có thể cân nhắc sử dụng R. R sẽ cho phép bạn nhập các tệp riêng lẻ dưới dạng khung dữ liệu và sau đó bạn có thể hợp nhất các khung dữ liệu lại với nhau. Tôi tin rằng ví dụ gấu trúc của Python cung cấp chức năng tương tự, nhưng tôi chưa sử dụng nó.
Faheem Mitha

@FaheemMitha Perl / Python chắc chắn là quá mức cần thiết cho việc này. Cộng với Python trên AIX có thể hơi có vấn đề.
peterph

@peterph Vâng, có thể. Nhưng nếu anh ta phải thực hiện các thao tác như vậy thường xuyên, thì phương pháp R có nhiều điều để khuyến nghị. Mặc dù tôi không biết gì về tình trạng hiện tại của R trên AIX. Mặc dù R của khá nhiều bất kỳ cổ điển nào cũng có thể thực hiện các loại thao tác này.
Faheem Mitha

1
@FaheemMitha tại sao bạn muốn giới thiệu R cho việc này? Tất cả những gì OP cần là loại bỏ 3 dòng trên cùng khỏi tất cả trừ tập tin đầu tiên. Với giao diện dựa trên văn bản mạnh mẽ của UNIX, nó hoạt động cho các tiện ích tiêu chuẩn.
peterph

1
@peterph Chà, không cần thiết cho thao tác cụ thể này, nhưng có vẻ như người đăng cần phải thao tác với các bảng văn bản, và nói chung R là một cách tốt để làm như vậy, và có thể điều chỉnh tốt hơn cho các tình huống phức tạp hơn. Một cách tiếp cận khác của việc sử dụng các công cụ unix chắc chắn là khả thi. Tôi không cho rằng đó là một cách tồi để đi.
Faheem Mitha

Câu trả lời:


18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt

@Stephane Chazelas: Hối hận vì nhận xét trước đó. Cảm ơn nó hoạt động hoàn hảo như mong đợi .. !!!
Ram

1
@ram tail -n +4có nghĩa là, bất kể kích thước của tệp, 3 dòng trên cùng được loại trừ. Tôi chỉ thử nó với một fie 10 dòng. Đừng trộn lẫn "4" ở đây với thực tế là mẫu của bạn có 4 dòng. Về cơ bản đó là một sự trùng hợp.
Michael Durrant

@ram :) để hoàn thiện, headcó một tùy chọn tương tự: -n -Xsẽ in tất cả trừ các X dòng cuối cùng .
peterph

2
@peterph, không phải trên AIX, không phải trong đặc tả POSIX (chỉ cho phép số dương)
Stéphane Chazelas

Hừm, xấu của tôi ... đây là một phần mở rộng GNU.
peterph

7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt

2
+1 nhưng bạn có thể thêm một chút giải thích? Không những gì ${}cú pháp làm trong sed?
terdon

Đó không phải là ${}, nhưng "làm {...}trên dòng 4 đến cuối"; nó loại bỏ các dòng phù hợp, nhưng chỉ sau khi tiêu đề đầu tiên đã đi qua. Sử dụng đuôi là tổng quát hơn và mạnh mẽ hơn, mặc dù.
alexis

@terdon như đã nói, {}là nhóm các lệnh.
peterph

@alexis phụ thuộc vào những gì bạn muốn cuối cùng. Một trong những lợi thế (không quan trọng trong những ngày này) là nó chỉ sinh ra một quá trình. Thêm vào đó, bạn có thể dễ dàng biến nó thành một kịch bản với #!/bin/sedvai trò là thông dịch viên.
peterph
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.