2010-09-27 32 views
114

Tôi có hai tập tin văn bản, mỗi người trong số họ có chứa một thông tin bởi dòng như vậy như thếLàm thế nào để hợp nhất hai tập tin từng dòng trong Bash

file1.txt   file2.txt 
----------   --------- 
linef11    linef21 
linef12    linef22 
linef13    linef23 
.     . 
.     . 
.     . 

Tôi muốn kết hợp đề tài file dòng bằng dòng sử dụng một bash tập lệnh để có được:

fileresult.txt 
-------------- 
linef11  linef21 
linef12  linef22 
linef13  linef23 
.   . 
.   . 
.   . 

Làm thế nào điều này có thể được thực hiện trong Bash?

Trả lời

177

Bạn có thể sử dụng paste:

paste file1.txt file2.txt > fileresults.txt 
+0

Làm cách nào để hoạt động nếu tôi muốn sử dụng dấu phân cách? – Teja

+3

@SOaddict '' 'dán -d" \ n "*> results.txt''' –

+0

' dán' sẽ tách riêng mỗi cột bằng một tab trừ khi bạn ghi đè bằng tùy chọn '-d', vì vậy bạn có thể sử dụng một cái gì đó như' awk', 'sed', vv ... để định dạng từng dòng. Ví dụ: 'paste file1.txt file2.txt | awk '{printf'% -61s |% s \ n ", $ 1, $ 2} '' ... điều này bắt chước đầu ra 'diff - by-by-side') –

8

Kiểm tra

man paste 

có thể theo sau bởi một số lệnh như untabify hoặc tabs2spaces

+0

M-x thay thế chuỗi trong Emacs sẽ đưa ra các tab, có lẽ là Vim và có thể một số trình soạn thảo văn bản khác cũng có thể làm điều đó. – Ben

+6

sử dụng tùy chọn -d để chỉ định dấu tách khác với tab – Pedru

18

đây là phương pháp không dán

awk

awk 'BEGIN {OFS=" "}{ 
    getline line < "file2" 
    print $0,line 
} ' file1 

Bash

exec 6<"file2" 
while read -r line 
do 
    read -r f2line <&6 
    echo "${line}${f2line}" 
done <"file1" 
exec 6<&- 
8

Hãy thử sau.

pr -tmJ a.txt b.txt > c.txt 
+0

Ngoài ra, hãy sử dụng tùy chọn -s nếu bạn muốn thay đổi dấu phân cách. (+1) –

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