Có một công cụ dành riêng cho việc đó : paste
. Nó nối từng dòng đầy đủ từ tệp đầu tiên với dòng tương ứng từ tệp thứ hai; bạn có thể loại bỏ các cột không mong muốn trước hoặc sau. Ví dụ: giả sử rằng các cột của bạn được phân định bằng tab:
paste file1.txt file2.txt | cut -f 1,2,3,6
Đây là một cách để lọc trước cả hai tệp dựa trên thay thế quá trình ksh / bash / zsh.
paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
<(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')
Awk chủ yếu hướng đến việc xử lý một tệp cùng một lúc, nhưng bạn có thể gọi getline
để đọc từ một tệp khác song song.
awk '
BEGIN {file2=ARGV[2]; ARGV[2]="";}
{$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt
Cho đến nay tôi đã giả sử rằng bạn muốn khớp dòng 1 của tệp 1 với dòng 1 của tệp 2, dòng 2 của tệp 1 với dòng 2 của tệp 2, v.v. Nếu bạn muốn khớp nội dung của một cột, đó là một vấn đề hoàn toàn khác join
sẽ thực hiện công việc miễn là cột bạn muốn khớp được sắp xếp.
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt