Bắt đầu ngayBắt đầu miễn phí

Làm thế nào để loại bỏ các dòng trùng lặp?

Một lệnh khác thường dùng với sortuniq, chức năng của nó là loại bỏ các dòng trùng lặp. Cụ thể hơn, nó loại bỏ các dòng trùng lặp đứng cạnh nhau. Nếu một tệp chứa:

2017-07-03
2017-07-03
2017-08-03
2017-08-03

thì uniq sẽ tạo ra:

2017-07-03
2017-08-03

nhưng nếu tệp chứa:

2017-07-03
2017-08-03
2017-07-03
2017-08-03

thì uniq sẽ in cả bốn dòng. Lý do là uniq được thiết kế để làm việc với các tệp rất lớn. Để loại bỏ các dòng trùng lặp không liền kề khỏi một tệp, nó sẽ phải giữ toàn bộ tệp trong bộ nhớ (hoặc ít nhất là mọi dòng duy nhất đã thấy cho đến lúc đó). Bằng cách chỉ loại bỏ các bản sao liền kề, nó chỉ cần giữ dòng duy nhất gần nhất trong bộ nhớ.

Bài tập này là một phần của khóa học

Nhập môn Shell

Xem khóa học

Hướng dẫn bài tập

Viết một pipeline để:

  • lấy cột thứ hai từ seasonal/winter.csv,
  • loại bỏ từ "Tooth" khỏi đầu ra để chỉ còn tên răng được hiển thị,
  • sắp xếp đầu ra để mọi lần xuất hiện của cùng một tên răng nằm cạnh nhau; và
  • hiển thị mỗi tên răng một lần kèm số lần xuất hiện.

Phần bắt đầu của pipeline giống bài trước:

cut -d , -f 2 seasonal/winter.csv | grep -v Tooth

Mở rộng nó với lệnh sort, và dùng uniq -c để hiển thị các dòng duy nhất kèm số lần xuất hiện của mỗi dòng, thay vì dùng uniqwc.

Bài tập tương tác thực hành

Biến lý thuyết thành hành động với một trong các bài tập tương tác của chúng tôi

Bắt đầu bài tập