2015-06-19 18 views
5

Tôi muốn cắt hai cột từ một tệp và dán chúng vào cuối tệp thứ hai. Các tập tin hai có cùng số chính xác của dòngcắt các cột thành một tệp và lưu vào cuối một tệp khác

file1.txt 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 

file2.txt 
a b c d e f g h i j 
a b c d e f g h i j 
a b c d e f g h i j 
a b c d e f g h i j 

Cho đến nay tôi đã được sử dụng

cut -f9-10 file2.txt | paste file1.txt - > file3.txt 

mà kết quả đầu ra chính xác những gì tôi muốn

1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 

Tuy nhiên tôi không muốn phải tạo một tệp mới, tôi muốn thay đổi tệp 1 thành trên. Tôi đã thử

cut -f9-10 file2.txt | paste file1.txt - 

nhưng nó chỉ in mọi thứ trên màn hình. Có cách nào chỉ cần thêm cột 9 và 10 vào cuối tập tin1.txt không?

+0

lưu ý rằng bạn đề cập đến hai tệp có cùng số lượng dòng, trong khi tệp thứ hai có thêm một dòng. – fedorqui

Trả lời

1

Sử dụng sponge từ moreutils! Nó cho phép bạn soak up standard input and write to a file. Nghĩa là, để thay thế một tệp tại chỗ sau một đường ống.

cut -f9-10 file2.txt | paste file1.txt - | sponge file1.txt 

Lưu ý bạn cũng có thể làm những gì bạn đang làm bằng cách sử dụng paste với process substitution.

$ paste -d' ' file1.txt <(awk '{print $(NF-1), $NF}' file2.txt) | sponge file1.txt 
$ cat file1.txt 
1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 
1 2 3 4 5 6 7 8 9 10 i j 

này tham gia file1.txt với hai cột cuối cùng từ file2.txt sử dụng ' ' như delimiter.

+0

Đây là giải pháp tốt hơn nhiều so với phiên bản tôi đã đăng, vì vậy tôi đã xóa bỏ và bỏ phiếu bầu này. –

+0

Cảm ơn @MikeAtkins :) Tôi đã làm một số nghiên cứu và phát hiện ra điều này 'sponge' thingy. Nó trông giống như công cụ! – fedorqui

Các vấn đề liên quan