Câu hỏi Làm thế nào để loại bỏ tất cả các dòng trong một tập tin có chứa một chuỗi từ một tập tin khác


Tôi muốn xóa tất cả các dòng trong một tệp có chứa chuỗi từ một tệp khác. Vì vậy, tôi không muốn loại bỏ các dòng giống hệt nhau, không có, nhưng loại bỏ tất cả các dòng nếu họ chia sẻ một chuỗi từ một tập tin. Và viết những dòng không chứa một chuỗi từ tập tin khác vào một tập tin mới. Thí dụ:

Tập tin:

bird, snake
dog, cat
rabbit,fox
eagle,dove

Tệp B:

dog
dove

RESULT File:

bird,snake
rabbit,fox

Hãy giúp tôi.

Cảm ơn rất nhiều.


1
2018-04-13 20:14


gốc


Phương pháp tốt nhất để sử dụng phụ thuộc vào kích thước của cả hai tệp. Cả hai tệp (có khả năng) (hàng chục) hàng nghìn dòng hoặc chỉ tệp A? - Jacob Vlijm


Các câu trả lời:


Sử dụng các mục sau grep biểu hiện:

grep -vFf file_B file_A

Đây là một bài kiểm tra:

$ cat file_A 
bird, snake
dog, cat
rabbit,fox
eagle,dove

$ cat file_B 
dog
dove

$ grep -vFf file_B file_A 
bird, snake
rabbit,fox
  • -f sẽ đọc các mẫu từ một tệp (một tệp trên mỗi dòng), file_B trong trường hợp này
  • -F sẽ xem xét các mẫu được đọc từ file_B như chuỗi cố định, có nghĩa là không có hoạt động mẫu nào khác được thực hiện trên các mẫu
  • -v sẽ in các dòng không khớp, tức là các dòng file_A không chứa petterns từ file_B.

6
2018-04-13 20:18



Chào. Cảm ơn câu trả lời. Trong thử nghiệm đó nó đang hoạt động. Nhưng nếu tôi thử nghiệm nó với các tập tin lớn hơn, ví dụ 20k dòng nó không hoạt động chính xác. Nó không loại bỏ mọi dòng nó nên làm. Có lẽ một nửa trong số họ hoặc ít hơn. Chuyện gì vậy? - Rick
Thật khó để nói mà không nhìn thấy nội dung của tập tin thực tế .... bạn có thể cung cấp một số dòng ví dụ thực tế mà điều này là không? - heemayl
Chỉ cần một danh sách các tên đầu tiên chẳng hạn. Với 10 nó đang hoạt động. Với 10k thì không. - Rick
Nếu nó vẫn không hoạt động, xin vui lòng chỉnh sửa câu hỏi của bạn và thêm một số nội dung tệp thực sự từ cả hai tệp nơi tệp này không hoạt động .. - heemayl
@JacobVlijm Hãy để chúng tôi tiếp tục cuộc thảo luận này trong trò chuyện. - muru