2012-08-08 17 views
6

Tôi thực sự xin lỗi vì câu hỏi noob này, nhưng tôi không thể thực sự tìm ra những gì đang xảy ra ở đây. Tôi muốn tính toán tần số của các từ từ một tập tin, trong đó các từ là một dòng. Các tập tin thực sự lớn, vì vậy đây có thể là vấn đề (nó đếm 300k dòng trong ví dụ này)Tại sao uniq không hoạt động trên tệp lớn này? bash

tôi làm lệnh này:

cat .temp_occ | uniq -c | sort -k1,1nr -k2 > distribution.txt 

và vấn đề là nó mang lại cho tôi một lỗi nhỏ: nó coi tôi là những từ giống nhau. Ví dụ các mục đầu tiên là:

306 continua 
278 apertura 
211 eventi 
189 murah 
182 giochi 
167 giochi 

với GIOCHI lặp lại hai lần như bạn có thể nhìn thấy

ở dưới cùng của file nó trở nên tồi tệ hơn và có vẻ như thế này:

1 win 
    1 win 
    1 win 
    1 win 
    1 win 
    1 win 
    1 win 
    1 win 
    1 win 
    1 winchester 
    1 wind 
    1 wind 

cho tất cả các từ

Tôi thực sự xin lỗi một lần nữa vì câu hỏi ngu ngốc, nhưng tôi rất tiếc với chương trình trình bao. Tôi đang làm gì sai?

thanks a lot

+1

sử dụng vô dụng của mèo. – scai

Trả lời

12

Cố gắng sắp xếp đầu tiên:

cat .temp_occ | sort| uniq -c | sort -k1,1nr -k2 > distribution.txt 
+1

Tôi cảm thấy ngu ngốc, cảm ơn rất nhiều và xin lỗi lần nữa vì câu hỏi noob – Epi

1

Có thể rằng một số từ có ký tự khoảng trắng sau họ? Nếu vậy, bạn nên xóa chúng bằng cách sử dụng một cái gì đó như thế này:

cat .temp_occ | tr -d ' ' | uniq -c | sort -k1,1nr -k2 > distribution.txt 
+0

Tôi chưa kiểm tra điều đó trước khi đăng. Đây là những gì tôi mặc dù quá, nhưng khoảng trắng là như nhau trong tất cả các từ. Các giải pháp để sử dụng sắp xếp cũng trước khi uniq làm việc như một say mê. Cảm ơn đã giúp đỡ :) – Epi

2

Kích thước của tệp không liên quan gì đến những gì bạn đang thấy. From the man page of uniq(1):

Lưu ý: 'uniq' không phát hiện các dòng lặp lại trừ khi chúng liền kề. Bạn có thể muốn sắp xếp đầu vào trước tiên hoặc sử dụng 'sort -u' mà không cần 'uniq'. Ngoài ra, so sánh tôn vinh các quy tắc được xác định bởi 'LC_COLLATE'.`

Vì vậy, chạy uniq trên

a 
b 
a 

sẽ trở lại:

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