Làm cách nào để tìm các dòng duy nhất và xóa tất cả các dòng trùng lặp khỏi tệp? Tệp đầu vào của tôi là
1
1
2
3
5
5
7
7
Tôi muốn kết quả là:
2
3
sort file | uniqsẽ không thực hiện công việc. Sẽ hiển thị tất cả các giá trị 1 lần
Làm cách nào để tìm các dòng duy nhất và xóa tất cả các dòng trùng lặp khỏi tệp? Tệp đầu vào của tôi là
1
1
2
3
5
5
7
7
Tôi muốn kết quả là:
2
3
sort file | uniqsẽ không thực hiện công việc. Sẽ hiển thị tất cả các giá trị 1 lần
sort file | uniqhiển thị tất cả các giá trị 1 lần là vì nó ngay lập tức in dòng mà nó gặp phải lần đầu tiên và đối với những lần gặp tiếp theo, nó chỉ bỏ qua chúng.
Câu trả lời:
uniq có tùy chọn bạn cần:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Sử dụng như sau:
sort < filea | uniq > fileb
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt. Có thể bạn đã bỏ qua các tiện ích mở rộng. Tôi đang sử dụng Mac OS X. bạn phải đi từ filea.txtmột số khácfileb.txt
sortvà điểm của đường ống là gì uniqkhi bạn chỉ có thể làm sort -u file -o filenhững gì bạn đang làm là xóa các giá trị trùng lặp tức là filebchứa 1,2,3,5,7OP của bạn chỉ muốn các dòng duy nhất được 2,3và đạt được bằng uniq -u filephần mở rộng tệp không có gì với nó, câu trả lời của bạn là sai.
Bạn cũng có thể in ra giá trị duy nhất trong "tệp" bằng cách sử dụng catlệnh bằng cách chuyển đến sortvàuniq
cat file | sort | uniq -u
uniq -u đã khiến tôi phát điên vì nó không hoạt động.
Vì vậy, thay vì điều đó, nếu bạn có python (hầu hết các bản phân phối và máy chủ Linux đã có nó):
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.
uniqueData = []
fileData = open('notUnique.txt').read().split('\n')
for i in fileData:
if i.strip()!='':
uniqueData.append(i)
print uniqueData
###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))
Just FYI, Từ trang uniq Man:
"Lưu ý: 'uniq' không phát hiện các dòng lặp lại trừ khi chúng ở gần nhau. Bạn có thể muốn sắp xếp đầu vào trước hoặc sử dụng 'sort -u' mà không có 'uniq'. Ngoài ra, các phép so sánh tuân theo các quy tắc được chỉ định bởi 'LC_COLLATE'."
Một trong những cách đúng, để gọi với: # sort nonUnique.txt | uniq
$ cat x
3
1
2
2
2
3
1
3
$ uniq x
3
1
2
3
1
3
$ uniq -u x
3
1
3
1
3
$ sort x | uniq
1
2
3
uniq -u < file sẽ thực hiện công việc.
uniqnên làm tốt nếu tệp của bạn là / có thể được sắp xếp, nếu bạn không thể sắp xếp tệp vì một số lý do, bạn có thể sử dụng awk:
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
điều này đã làm việc cho tôi cho một cái tương tự. Sử dụng cái này nếu nó không được sắp xếp. Bạn có thể xóa sắp xếp nếu nó được sắp xếp
Tôi thấy điều này dễ dàng hơn.
sort -u input_filename > output_filename
-u viết tắt của độc đáo.
Đây là lần đầu tiên tôi thử
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Sau khi thực hiện một con mèo -e all.sorted
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Mỗi dòng thứ hai có một khoảng trắng :( Sau khi xóa tất cả các khoảng trắng, nó vẫn hoạt động!
cảm ơn bạn
sort file | uniq -usẽ xuất ra bảng điều khiển cho bạn.