Để thực hiện chính xác những gì các câu hỏi yêu cầu là một chút phức tạp hơn câu trả lời trước và sẽ đòi hỏi một cái gì đó như thế này:
sed 's/|/:/2' file1 | sort -t: >file1.tmp
sed 's/|/:/2' file2 | sort -t: >file2.tmp
join -t':' file1.tmp file2.tmp -a1 -e'|' -o'0,1.2,2.2' | tr ':' '|'
Unix tham gia chỉ có thể tham gia vào một trường AFAIK duy nhất để bạn phải sử dụng các tệp sử dụng dấu phân cách khác để "kết hợp hai tệp trên hai trường", trong trường hợp này là hai trường đầu tiên. Tôi sẽ sử dụng dấu hai chấm :, tuy nhiên nếu : tồn tại trong bất kỳ đầu vào nào, bạn sẽ cần phải sử dụng cái gì khác, ví dụ tab có thể là lựa chọn tốt hơn để sử dụng sản xuất. Tôi cũng sắp xếp lại đầu ra trên trường hợp chất mới, sort -t:
, cho các tệp đầu vào ví dụ không tạo ra sự khác biệt nào nhưng sẽ cho dữ liệu thế giới thực. sed 's/|/:/2'
thay thế sự xuất hiện thứ hai của đường ống với dấu hai chấm trên mỗi dòng trong tệp.
file1.tmp
01|a:jack|d
02|b:ron|c
03|d:tom|e
file2.tmp
01|a:nemesis|f
02|b:brave|d
04|d:gorr|h
Bây giờ chúng ta sử dụng join
đầu ra được lọc bởi tr
với hơn một vài tùy chọn nâng cao:
-t':'
chỉ định đại tràng tạm thời delimiter
-a1
bên ngoài bên trái tham gia
-e'|'
chỉ định chuỗi thay thế cho tham gia không thành công, về cơ bản là dấu phân cách đầu ra cuối cùng N-1 lần trong đó N là số trường phân cách đường ống được nối vào bên phải dấu hai chấm trong tệp2.tmp. Trong trường hợp này N = 2 nên một ký tự ống.
-o'0,1.2,2.2'
quy định các định dạng đầu ra:
0
tham gia lĩnh vực
1.2
trường 2 của file1.tmp, tức là tất cả mọi thứ bên phải của ruột
2.2
trường 2 của file2.tmp
tr ':' '|'
Cuối cùng chúng tôi dịch các dấu hai chấm trở lại đường ống cho đầu ra cuối cùng.
Sản lượng hiện nay phù hợp với sản lượng mẫu câu hỏi chính xác câu trả lời trước đó đã không làm:
01|a|jack|d|nemesis|f
02|b|ron|c|brave|d
03|d|tom|e||
bạn nói đúng, đầu ra của bạn phù hợp với sản lượng của mình. trường hợp đóng cửa. Chúc mọi người may mắn. – shellter
@shellter. Không hẳn. Có một đường ống bị thiếu ở cuối bản ghi mà không có một kết quả phù hợp trong bài viết của idm. Tuy nhiên, tôi đưa ra điều này là một chiến lược để có được hầu hết mọi người trên bướu tìm kiếm chức năng kết nối bên ngoài Linux. –