2014-05-19 33 views
10

Làm cách nào tôi có thể in chỉ những dòng xuất hiện chính xác một lần trong một tệp? Ví dụ, được đưa ra tập tin này:Làm cách nào để in chỉ các dòng duy nhất trong BASH?

mountain 
forest 
mountain 
eagle 

Kết quả sẽ được điều này, bởi vì dòng mountain xuất hiện hai lần:

forest 
eagle 
  • Các dòng có thể được sắp xếp, nếu cần thiết.
+0

Tôi nghĩ rằng bạn có thể sử dụng từ điển . Bạn có thể xem qua liên kết này: http://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash –

Trả lời

8

Sử dụng awk:

awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file 
eagle 
forest 
+0

Không cần phải quá phức tạp. Lệnh 'uniq' đơn giản cũng sẽ thực hiện công việc. – Rahul

+0

1. Nó không phức tạp và 2. Nó tránh đắt tiền 'loại' cho các tập tin lớn hơn. – anubhava

+0

@anubhava Rất tuyệt. +1. Nhưng đối với nó _is_ thực sự đơn giản hơn để sử dụng 'uniq'. Và giữ trong các tập tin lớn hơn bộ nhớ - những người hiểu biết - những gì là tốn kém hơn. Trao đổi hoặc sắp xếp. :) – jm666

26

Sử dụng sortuniq:

sort inputfile | uniq -u 

Tùy chọn -u sẽ gây uniq in dòng chỉ độc đáo. Trích dẫn từ man uniq:

-u, --unique 
      only print unique lines 

Đối với đầu vào của bạn, nó sẽ tạo ra:

eagle 
forest 
+0

@jordan Không biết. Ai đó không thích nó, có lẽ. – devnull

+1

@anubhava Bạn đã thử chưa? – devnull

+0

Xin lỗi tôi đã bỏ lỡ '-u' trong bản sao/dán. – anubhava

3

Bạn gần như đã có câu trả lời trong câu hỏi của bạn:

sort filename | uniq -u

Các vấn đề liên quan