giao điểm của hai tệp theo cột đầu tiên


7

Tôi có hai tệp trong tệp A, có tệp Sequ_numbers trong tệp B khác, có nhiều cột và cột đầu tiên là số thứ tự, tôi muốn lấy một tệp có tất cả các dòng trong B có số thứ tự nằm trong Làm thế nào tôi có thể đạt được điều này? cảm ơn

như tập tin A

1
3
8
9
20

tập tin B

1 kfjk 3243424
2 fkdkf 23543592
3 iefjk 21493402
7 dlafdl 23435231
8 kfkdlkf 309834

2
Cung cấp tốt hơn đầu vào và đầu ra mẫu.
Gilles Quenot

Câu trả lời:


10

Bạn muốn join (1), tôi đoán:

Đối với mỗi cặp dòng đầu vào có trường tham gia giống hệt nhau, hãy viết một dòng thành đầu ra tiêu chuẩn. Trường tham gia mặc định là trường đầu tiên, được phân cách bằng khoảng trắng. Khi FILE1 hoặc FILE2 (không phải cả hai) là -, hãy đọc đầu vào tiêu chuẩn.

[0 1075 12:50:10] ~/temp/sx % join A B
1 kfjk 3243424
3 iefjk 21493402
8 kfkdlkf 309834
join: file 1 is not in sorted order

OK, vì vậy rõ ràng bạn cần kết hợp điều này với sort (1)để sắp xếp theo giá trị alpha (không phải giá trị số, vì vậy 20 <3)

join <(sort A) <(sort B)làm việc cho tôi, nhưng điều đó có vẻ kỳ lạ và có thể là một phần mở rộng zsh. Không có hại gì khi làm

sort A > A.tmp; sort B > B.tmp; join A.tmp B.tmp

(Như thường lệ, kiểm tra các trang man cho cạm bẫy.)


1
Quá trình thay thế ( join <(sort A) <(sort B)) chỉ hoạt động tốt trong bash :-)
Will Vousden 10/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.