Tôi đang cố gắng tìm ra tần suất xuất hiện của mỗi chữ cái trong bảng chữ cái tiếng Anh trong tệp đầu vào. Làm thế nào tôi có thể làm điều này trong một kịch bản bash?Tập lệnh Bash để tìm tần suất của mỗi chữ cái trong một tệp
Trả lời
Chỉ cần một lệnh awk
awk -vFS="" '{for(i=1;i<=NF;i++)w[$i]++}END{for(i in w) print i,w[i]}' file
nếu bạn muốn phân biệt dạng chữ, thêm tolower()
awk -vFS="" '{for(i=1;i<=NF;i++)w[tolower($i)]++}END{for(i in w) print i,w[i]}' file
và nếu bạn muốn chỉ nhân vật,
awk -vFS="" '{for(i=1;i<=NF;i++){ if($i~/[a-zA-Z]/) { w[tolower($i)]++} } }END{for(i in w) print i,w[i]}' file
và nếu bạn muốn chỉ chữ số, thay đổi /[a-zA-Z]/
để /[0-9]/
nếu bạn không muốn hiển thị unicode, làm export LC_ALL=C
Cảm ơn bạn đã trả lời. – SkypeMeSM
Tôi xin lỗi tôi không quen thuộc lắm với awk. Các giải pháp hoạt động nhưng tôi nhận được tất cả các ký tự thay vì chỉ ký tự chữ và số. awk -vFS = "" '{cho (i = 1; i <= NF; i + +) w [không đủ ($ i)] ++ tổng ++} END {cho (i in w) in i, w [i], w [i]/sum} ' – SkypeMeSM
Xin cảm ơn một lần nữa. Tôi tự hỏi tại sao tôi nhận được kết quả như ü 2 và é 2, khi regex là [a-zA-Z]. – SkypeMeSM
Dưới đây là một gợi ý:
while read -n 1 c
do
echo "$c"
done < "$INPUT_FILE" | grep '[[:alpha:]]' | sort | uniq -c | sort -nr
Cảm ơn bạn đã trả lời. – SkypeMeSM
Một giải pháp với sed
, sort
và uniq
:
sed 's/\(.\)/\1\n/g' file | sort | uniq -c
Điều này tính tất cả các ký tự, không chỉ chữ cái. Bạn có thể lọc ra với:
sed 's/\(.\)/\1\n/g' file | grep '[A-Za-z]' | sort | uniq -c
Nếu bạn muốn xem xét chữ hoa và chữ thường khi đó, chỉ cần thêm một bản dịch:
sed 's/\(.\)/\1\n/g' file | tr '[:upper:]' '[:lower:]' | grep '[a-z]' | sort | uniq -c
Cảm ơn bạn.Điều này xem xét các ký tự chữ hoa và chữ thường là riêng biệt. Làm thế nào tôi có thể tính toán các tần số mà chúng tôi xem xét A và một như nhau? – SkypeMeSM
Có điều này cũng hoạt động tốt. Tôi tự hỏi làm thế nào tôi có thể tính toán xác suất tức là tần số/tổng số tiền. Chúng tôi sẽ cần phải ống đầu ra một lần nữa để sed một lần nữa nhưng tôi không thể tìm ra các regex liên quan? – SkypeMeSM
Bạn có thể thêm một số 'wc',' cắt', 'dc',' tee' và các lệnh khác, nhưng nó sẽ được tung hứng hơn với các mảng hơn là một tác phẩm có thể duy trì. Tôi nghĩ rằng việc thêm nhiều tính năng sẽ dễ dàng hơn với một tập lệnh perl. – mouviciel
Giải pháp của tôi sử dụng grep
, sort
và uniq
.
grep -o . file | sort | uniq -c
Bỏ qua trường hợp:
grep -o . file | sort -f | uniq -ic
làm thế nào tôi có thể nhận được tần số/tổng (tất cả các tần số) sau này? – SkypeMeSM
Điều này hoạt động với thiết bị đầu cuối của mac. –
@SkypeMeSM để nhận tần suất của từng ký tự, chỉ chia cho tổng số ký tự (được cung cấp bởi 'tệp wc -c'). –
Tương tự như mouviciel của câu trả lời ở trên, nhưng tổng quát hơn cho Bourne và Korn vỏ được sử dụng trên hệ thống BSD, khi bạn không có GNU sed, mà hỗ trợ \ n trong một sự thay thế, bạn có thể thoát khỏi một dấu chéo ngược xuống dòng:
sed -e's/./&\
/g' file | sort | uniq -c | sort -nr
hoặc để tránh sự chia rẽ hình ảnh trên màn hình, chèn một dòng mới theo nghĩa đen theo loại tổ hợp phím CTRL + V Ctrl + J
sed -e's/./&\^J/g' file | sort | uniq -c | sort -nr
- 1. Đếm tần số của các chữ cái trong một tệp văn bản
- 2. Nhận tần suất của một tệp âm thanh trong mỗi 1/4 giây trong android
- 3. Sắp xếp danh sách theo tần suất của chữ cái trong python (thứ tự giảm)
- 4. Thay đổi chữ cái đầu tiên của mỗi dòng trong một tệp thành chữ hoa
- 5. Lặp qua bảng chữ cái trong Bash
- 6. Tệp nguồn trong tập lệnh bash
- 7. Tập lệnh Bash để thực hiện lệnh trên tất cả các tệp trong một thư mục
- 8. Tập lệnh để tìm các bản sao trong tệp csv
- 9. số từ của mỗi dòng trong một tập lệnh
- 10. Javascript: Tìm ra chữ cái trước trong bảng chữ cái
- 11. Cách tìm tần suất của các ký tự trong một chuỗi trong Haskell?
- 12. Tập lệnh Bash để lưu trữ các tệp nhật ký
- 13. lệnh bash để grep một cái gì đó trên stderr và lưu kết quả trong một tập tin
- 14. Tần suất lịch sự của các yêu cầu AJAX?
- 15. Tần suất gọi SpriteBatch.Begin() /. End()?
- 16. Cách tìm chuỗi con trong biến tập lệnh bash shell
- 17. Cách bao gồm tệp trong tập lệnh bash shell
- 18. Viết hoa chữ cái đầu tiên của mỗi từ
- 19. Thực hiện một tập lệnh bash khi tạo tập tin
- 20. Lọc ký tự không phải chữ cái ra khỏi chuỗi trong tập lệnh shell
- 21. Nhận chữ cái đầu tiên của mỗi từ trong một chuỗi, trong Javascript
- 22. Cách lấy chữ cái đầu tiên trong biến Bash?
- 23. Viết hoa/Viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi trong Matlab?
- 24. Cách tốt hơn để tạo một tập lệnh bash tự truy tìm?
- 25. Lỗi Standard_in trong tập lệnh bash
- 26. Làm thế nào để thay đổi từng chữ cái của chuỗi bằng một số chữ cái nhất định?
- 27. Làm thế nào để bạn thấy giai thừa của một số trong tập lệnh Bash?
- 28. Tập lệnh Bash tạo một mảng từ ls?
- 29. Chạy một số tập lệnh trong tập lệnh bash song song
- 30. làm cách nào để thống kê tần suất báo chí chính của mình và đếm số
Tại sao bạn sử dụng bash cho điều này? –
Tìm thấy câu hỏi lập trình này ở đâu đó !! Tôi đoán perl sẽ là lựa chọn tốt hơn, phải không? – SkypeMeSM