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 sort là uniq,
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
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 uniq và wc.
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