Home / Hệ điều hành / Linux / Tìm những dòng chữ giống nhau giữa hai văn bản trong Linux

Tìm những dòng chữ giống nhau giữa hai văn bản trong Linux

Print Friendly, PDF & Email

Bạn có bao giờ gặp tình huống: tìm những dòng giống nhau giữa nhiều tập tin chưa? Trong bài viết này, tôi muốn giới thiệu với các bạn một giải pháp cho vấn đề này. Giải pháp trình bày không cần lập trình, chỉ là lệnh (tiện ích) có sẵn trong hệ điều hành mở Linux/Ubuntu.

Để dễ theo dõi, giả sử chúng ta có 2 files có nội dung như sau:

— File 1: apps.txt —
gimp
libreoffice
calibre – a free book management
dropbox
copy
unikey
google chrome
firefox

— File 2: clients.txt —
dropbox
copy
openoffice
matlab
GoldenDict
emacs
unikey

Bạn có thể tải hai tập tin có sẵn hoặc tạo nhanh hai files như sau:

nvntung@labs:~/Copy$ cat > apps.txt
gimp
libreoffice
calibre - a free book management
dropbox
copy
unikey
google chrome
firefox
nvntung@labs:~/Copy$ cat > clients.txt
dropbox
copy
openoffice
matlab
GoldenDict
emacs
unikey

Trong Linux/Ubuntu, lệnh (tiện ích) comm để trích ra những dòng văn bản chỉ có trong file này mà không có trong file kia và ngược lại, hoặc những dòng có cả trong hai file. Cú pháp của lệnh này như sau:

nvntung@labs:~/Copy$ comm file1 file2
Usage: comm [OPTION]... FILE1 FILE2
Compare sorted files FILE1 and FILE2 line by line.

Trong đó, hai file phải được sắp xếp theo một chiều nào đó. Minh họa cho lệnh này, chúng ta thử trả lời câu hỏi:

“Có những phần mềm khách hàng đã có (trong file clients.txt) mà danh sách phần mềm của công ty (trong file apps.txt) chưa có?”

Bên dưới là một cách sử dụng phổ biến lệnh comm:

nvntung@labs:~/Copy$ comm clients.txt apps.txt

Kết quả hiện thị trên 3 cột. Cột thứ nhất hiển thị các dòng duy nhất chỉ có trong file đầu tiên (clients.txt). Cột thứ hai hiển thị các dòng duy nhất chỉ có trong file thứ hai (apps.txt). Và cột thứ ba hiển thị các dòng có cả hai file.

comm command to find similar lines between two files in Linux/Ubuntu

comm command to find similar lines between two files in Linux/Ubuntu

Rõ ràng, với nội dung của hai được cung cấp trên, kết quả hiện thị trên hình được giải thích cho câu hỏi mà chúng ta đặt ra là:

  • emacs, GoldenDict, matlab, openoffice là những phần mềm (dòng) chỉ xuất hiện duy nhất trong file clients.txt
  • calibre – a free book management, firefox, gimp, google chrome, libreoffice là những phần mềm (dòng) chỉ có duy nhất ở công ty trong file apps.txt
  • copy, dropbox, unikey là những phần mềm (dòng) có cả hai file.

Cách sử dụng tùy biến lệnh comm:

Thứ tự các cột hiển thị được chỉ ra bằng các số thứ tự 1, 2 và 3. Việc này được chỉ ra như là cách sử dụng tham số. Cụ thể chúng ta có các trường hợp sau:

Nếu bạn chỉ muốn xem những dòng xuất hiện trong file thứ nhất thì sử dụng -23 (Nghĩa là: không muốn hiển thị ra các dòng duy nhất trong file thứ 2 và các dòng giống nhau chung của hai file; dấu – được hiểu đơn giản là trừ cột 2 và cột 3)

Nếu bạn chỉ muốn xem những dòng xuất hiện trong file thứ nhất thì sử dụng -13 (Nghĩa là: không muốn hiển thị ra các dòng duy nhất trong file thứ 1 và các dòng giống nhau chung của hai file; dấu – được hiểu đơn giản là trừ cột 1 và cột 3)

Nếu bạn chỉ muốn xem những dòng giống nhau chung xuất hiện ở cả hai file  -12 (Nghĩa là: không muốn hiển thị ra các dòng duy nhất trong file thứ 1 và file thứ 2, tức là chỉ hiển thị các dòng giống nhau chung của hai file).

Hãy xem minh họa với nội dung của hai file apps.txtclients.txt qua hình bên dưới:

Minh họa các tham số của lệnh comm

Minh họa các tham số của lệnh comm

Tôi hi vọng lệnh này giúp ích cho nhiều người. Chúc các bạn thành công.

comments

About Nguyen Vu Ngoc Tung

I love making new professional acquaintances. Don't hesitate to contact me via nguyenvungoctung@gmail.com if you want to talk about information technology, education, and research on complex networks analysis (i.e., metabolic networks analysis), data analysis, and applications of graph theory. Specialties: researching and proposing innovative business approaches to organizations, evaluating and consulting about usability engineering, training and employee development, web technologies, software architecture.