Lệnh comm trong Linux cho phép người dùng so sánh hai tệp được sắp xếp theo từng dòng. Trong hướng dẫn này, chúng ta sẽ thảo luận về công cụ dòng lệnh này bằng các ví dụ dễ hiểu. Nhưng trước khi thực hiện, vui lòng lưu ý rằng tất cả các ví dụ được đề cập trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 16.04LTS.
Ví dụ, giả sử 'file1' và 'file2' là hai tệp trong trường hợp của chúng ta. Tệp trước chứa các dòng sau:
trong khi tệp sau chứa các dòng sau:
Bây giờ, đây là đầu ra của lệnh 'comm' trong trường hợp này:
Vì vậy, bạn có thể thấy đầu ra bao gồm ba cột. Cột đầu tiên chứa các dòng duy nhất cho 'file1', cột thứ hai chứa các dòng duy nhất cho 'file2' và cuối cùng, cột thứ ba chứa các dòng chung cho cả hai tệp.
Ví dụ, đây là lệnh để ẩn cột thứ ba trong trường hợp của chúng ta:
Vì vậy, bạn có thể thấy rằng cột thứ ba đã bị ẩn.
Lưu ý rằng bạn có thể ẩn nhiều cột bằng một lệnh duy nhất. Ví dụ:
sẽ ẩn cả cột đầu tiên và cột thứ hai.
Vì vậy, bạn có thể thấy lệnh tạo ra kết quả đầu ra cho biết 'file1' không được sắp xếp. Bây giờ, nếu bạn không muốn công cụ kiểm tra xem dữ liệu đầu vào có được sắp xếp hay không, bạn có thể sử dụng tùy chọn --nocheck-order.
Vì vậy, bạn có thể thấy rằng thông báo trước đó đã được hiển thị đã bị ẩn.
Xin lưu ý rằng trong trường hợp bạn muốn yêu cầu rõ ràng lệnh comm thực hiện kiểm tra sắp xếp trên các tệp đầu vào, bạn có thể sử dụng tùy chọn --check-order.
Ví dụ, chúng tôi đã sử dụng ký hiệu dấu cộng (+) làm dấu phân cách.
Lệnh comm của Linux
Các ví dụ sau đây sẽ cung cấp cho bạn ý tưởng hay về cách thức hoạt động của công cụ 'comm'.1. Cách so sánh hai tệp đã sắp xếp bằng comm
Để so sánh hai tệp đã sắp xếp bằng 'comm', tất cả những gì bạn phải làm là truyền tên của chúng làm đối số cho công cụ dòng lệnh. Sau đây là cú pháp chung:
Mã:
comm [tên-tệp-đầu-tiên] [tên-tệp-thứ-hai]
Mã:
001
056
127
258
Mã:
002
056
167
369
Mã:
comm file1 file2
Vì vậy, bạn có thể thấy đầu ra bao gồm ba cột. Cột đầu tiên chứa các dòng duy nhất cho 'file1', cột thứ hai chứa các dòng duy nhất cho 'file2' và cuối cùng, cột thứ ba chứa các dòng chung cho cả hai tệp.
2. Cách ẩn các cột riêng lẻ trong đầu ra lệnh comm
Nếu muốn, bạn có thể ẩn các cột riêng lẻ trong đầu ra lệnh comm. Đối với điều này, bạn có ba tùy chọn dòng lệnh: -1, -2 và -3. Như bạn đã đoán, những con số này biểu thị các cột bạn muốn ẩn.Ví dụ, đây là lệnh để ẩn cột thứ ba trong trường hợp của chúng ta:
Mã:
comm -3 file1 file2
Vì vậy, bạn có thể thấy rằng cột thứ ba đã bị ẩn.
Lưu ý rằng bạn có thể ẩn nhiều cột bằng một lệnh duy nhất. Ví dụ:
Mã:
comm -12 file1 file2
3. Cách để lệnh comm so sánh các tệp không được sắp xếp
Như chúng ta đã biết, lệnh comm chỉ hoạt động với các tệp đã được sắp xếp. Nếu lệnh phát hiện thấy một tệp không được sắp xếp, một thông báo sẽ được tạo ra trong đầu ra để thông báo cho người dùng về điều này. Ví dụ, chúng tôi hoán đổi dòng đầu tiên và dòng thứ hai trong 'file1', sau đó so sánh với 'file2'. Sau đây là kết quả đầu ra:Vì vậy, bạn có thể thấy lệnh tạo ra kết quả đầu ra cho biết 'file1' không được sắp xếp. Bây giờ, nếu bạn không muốn công cụ kiểm tra xem dữ liệu đầu vào có được sắp xếp hay không, bạn có thể sử dụng tùy chọn --nocheck-order.
Mã:
comm --nocheck-order file1 file2
Vì vậy, bạn có thể thấy rằng thông báo trước đó đã được hiển thị đã bị ẩn.
Xin lưu ý rằng trong trường hợp bạn muốn yêu cầu rõ ràng lệnh comm thực hiện kiểm tra sắp xếp trên các tệp đầu vào, bạn có thể sử dụng tùy chọn --check-order.
4. Cách phân tách các cột đầu ra comm bằng chuỗi tùy chỉnh
Theo mặc định, các cột trong đầu ra lệnh comm được phân tách bằng dấu cách. Tuy nhiên, nếu muốn, bạn có thể thay đổi điều đó và có một chuỗi tùy chọn làm dấu phân cách. Bạn có thể thực hiện việc này bằng tùy chọn --output-delimiter. Tùy chọn này yêu cầu bạn chỉ định chuỗi mà bạn muốn sử dụng làm dấu phân cách.
Mã:
comm --output-delimiter=STR file1 file2
5. Cách tạo các dòng đầu ra comm được kết thúc bằng NUL
Theo mặc định, các dòng đầu ra của lệnh comm được kết thúc bằng dòng mới. Tuy nhiên, nếu muốn, bạn có thể kết thúc bằng NUL. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -z.
Mã:
comm -z file1 file2