Đếm số lần xuất hiện của từ trong tệp văn bản


31

Tôi có một tệp văn bản chứa các tweet và tôi bắt buộc phải đếm số lần một từ được đề cập trong tweet. Ví dụ: tệp chứa:

Apple iPhone X is going to worth a fortune
The iPhone X is Apple's latest flagship iPhone. How will it pit against it's competitors?

Và giả sử tôi muốn đếm số lần từ iPhone được đề cập trong tệp. Vì vậy, đây là những gì tôi đã cố gắng.

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l

Nó chắc chắn hoạt động nhưng tôi bối rối về lệnh 'wc' trong unix. Sự khác biệt là gì nếu tôi thử một cái gì đó như:

cut -f 1 Tweet_Data | grep -c "iPhone"

-c được sử dụng thay thế ở đâu? Cả hai đều mang lại kết quả khác nhau trong một tệp lớn chứa đầy các tweet và tôi bối rối về cách thức hoạt động của nó. Phương pháp nào là cách chính xác để đếm sự xuất hiện?


cut -f1đang cắt giảm dựa trên các tab, điều này không làm được gì nhiều ở đây. Bạn có chắc chắn rằng wc -lnó thực sự mang lại cho bạn số đếm chính xác? Nó sẽ hiển thị 2 ở đây, nhưng tôi đếm 3 trường hợp của "iPhone".
Jeff Schaller


Câu trả lời:


54

Đưa ra yêu cầu như vậy, tôi sẽ sử dụng GNU grep (cho -otùy chọn ), sau đó chuyển qua wcđể đếm tổng số lần xuất hiện:

$ grep -o -i iphone Tweet_Data | wc -l
3

Đồng bằng grep -ctrên dữ liệu sẽ đếm số lượng dòng khớp, không phải tổng số từ phù hợp. Việc sử dụng -otùy chọn sẽ cho grep xuất ra mỗi trận đấu trên dòng của nó, bất kể trận đấu có bao nhiêu lần trong dòng.

wc -lcho biết wctiện ích để đếm số lượng dòng. Sau khi grep đặt mỗi trận đấu vào dòng riêng, đây là tổng số lần xuất hiện của từ trong đầu vào.


Nếu GNU grep không có sẵn (hoặc mong muốn), bạn có thể chuyển đổi đầu vào trđể mỗi từ nằm trên một dòng riêng, sau đó sử dụng grep -cđể đếm:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3

1

Phương pháp dễ nhất là,

grep -wc "your_text" FileName

đối với bạn nó sẽ là,

grep -wc "iPhone" Tweet_Data

Tuy nhiên, câu trả lời rất rõ ràng nếu bạn kết hợp một từ như 'cool', bạn sẽ chỉ phù hợp với mát mẻ và KHÔNG ccooll vì vậy hãy lưu ý rằng các khoảng trống xung quanh vấn đề này.
jasonleonhard

1
Kết quả sẽ không chính xác khi từ xuất hiện nhiều hơn một lần trong một dòng.
hek2mgl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.