Tôi đã tìm thấy câu hỏi/câu trả lời này trên Google và dường như đề cập đến một tập dữ liệu rất cụ thể được tìm thấy trong một câu hỏi khác (How to merge two files using AWK?). Sau đây là câu trả lời tôi đang tìm kiếm (và tôi nghĩ hầu hết mọi người sẽ là), tức là, chỉ cần ghép nối mọi dòng từ hai tệp khác nhau bằng AWK. Mặc dù bạn có thể có thể sử dụng một số tiện ích UNIX như tham gia hoặc dán, AWK rõ ràng là nhiều hơn nữa linh hoạt và mạnh mẽ nếu đầu ra mong muốn của bạn là khác nhau, bằng cách sử dụng nếu báo cáo, hoặc thay đổi OFS (có thể hơn khó khăn để làm tùy thuộc vào tiện ích, xem dưới đây) ví dụ, thay đổi đầu ra một cách nhiều biểu cảm hơn (một yếu tố quan trọng đối với scripters vỏ)
đối với đơn giản line-by-line nối:
awk 'FNR==NR { a[FNR""] = $0; next } { print a[FNR""], $0 }' file1 file2
.
Điều này mô phỏng chức năng của một mảng được lập chỉ mục bằng số (AWK chỉ có mảng kết hợp) bằng cách sử dụng chuyển đổi loại ngầm định. Nó tương đối biểu cảm và dễ hiểu.
Sử dụng hai tập tin gọi là test1 và test2 với những dòng sau:
test1:
line one
line two
line three
test2:
line four
line five
line six
tôi nhận được kết quả này:
line one line four
line two line five
line three line six
Tùy thuộc vào ho w bạn muốn tham gia các giá trị giữa các cột trong đầu ra, bạn có thể chọn dấu phân cách trường đầu ra thích hợp. Dưới đây là ví dụ với dấu ba chấm (...) Tách các cột:
awk 'BEGIN { OFS="..."} FNR==NR { a[(FNR"")] = $0; next } { print a[(FNR"")], $0 }' test1 test2
yielding kết quả này:
line one...line four
line two...line five
line three...line six
Tôi hy vọng ít nhất rằng đây truyền cảm hứng cho tất cả các bạn để tận dụng sức mạnh của AWK!
Kent, giải thích tuyệt vời; Cảm ơn nhiều. Tôi đã không nhận ra rằng 'FNR == NR' đã hình thành một loại câu lệnh 'if'. Đây chính xác là những gì tôi cần để có thể tiến lên phía trước. Cảm ơn rất nhiều vì đã dành thời gian giúp đỡ! – jkovba