1. 학습
  2. /
  3. 강의
  4. /
  5. Nhập môn Shell

Connected

연습 문제

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ớ.

지침

100 XP

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.