Estoy tratando de averiguar la frecuencia de aparición de cada letra del alfabeto inglés en un archivo de entrada. ¿Cómo puedo hacer esto en un script bash?Script Bash para encontrar la frecuencia de cada letra en un archivo
Respuesta
Sólo un comando awk
awk -vFS="" '{for(i=1;i<=NF;i++)w[$i]++}END{for(i in w) print i,w[i]}' file
si quieres sensible a mayúsculas, añadir tolower()
awk -vFS="" '{for(i=1;i<=NF;i++)w[tolower($i)]++}END{for(i in w) print i,w[i]}' file
y si desea que sólo los personajes,
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
y si quieres sólo dígitos, cambiar /[a-zA-Z]/
a /[0-9]/
si no desea mostrar Unicode, hacer export LC_ALL=C
Gracias por su respuesta. – SkypeMeSM
Lo siento, no estoy muy familiarizado con awk. La solución funciona pero obtengo todos los caracteres en lugar de solo caracteres alfanuméricos. awk -vFS = "" '{for (i = 1; i <= NF; i ++) w [tolower ($ i)] ++ sum ++} END {para (i en w) print i, w [i], w [i]/sum} ' – SkypeMeSM
Gracias de nuevo. Me pregunto por qué obtengo resultados como ü 2 y é 2, cuando la expresión regular es [a-zA-Z]. – SkypeMeSM
Aquí es una sugerencia:
while read -n 1 c
do
echo "$c"
done < "$INPUT_FILE" | grep '[[:alpha:]]' | sort | uniq -c | sort -nr
Gracias por responder. – SkypeMeSM
Una solución con sed
, sort
y uniq
:
sed 's/\(.\)/\1\n/g' file | sort | uniq -c
Esto cuenta todos los personajes, no solo las letras. Puede filtrar con:
sed 's/\(.\)/\1\n/g' file | grep '[A-Za-z]' | sort | uniq -c
Si usted desea considerar mayúsculas y minúsculas como lo mismo, basta con añadir una traducción:
sed 's/\(.\)/\1\n/g' file | tr '[:upper:]' '[:lower:]' | grep '[a-z]' | sort | uniq -c
Gracias.Esto considera caracteres mayúsculas y minúsculas como separadas. ¿Cómo puedo calcular las frecuencias donde consideramos A y a como lo mismo? – SkypeMeSM
Sí, esto funciona muy bien también. Me pregunto cómo puedo calcular las probabilidades, es decir, frecuencia/suma total. Tendremos que conectar la salida de nuevo a sed, pero no puedo entender la expresión regular involucrada. – SkypeMeSM
Puede agregar algunos 'wc',' cut', 'dc',' tee' y otros comandos, pero sería más malabares con las placas que un trabajo fácil de mantener. Creo que agregar más características sería más fácil con un script de Perl. – mouviciel
Mi solución usando grep
, sort
y uniq
.
grep -o . file | sort | uniq -c
Ignorar mayúsculas:
grep -o . file | sort -f | uniq -ic
¿cómo puedo obtener la frecuencia/suma (todas las frecuencias) después de esto? – SkypeMeSM
Esto funciona con una terminal de mac. –
@SkypeMeSM para obtener la frecuencia de cada carácter, simplemente divida por el número total de caracteres (que está dado por 'wc -c archivo'). –
similares a mouviciel de respuesta anterior, pero más genérico para Bourne y Korn proyectiles utilizados en sistemas BSD, cuando usted no tiene sed de GNU, que soporta \ n en un reemplazo, puede barra invertida una nueva línea:
sed -e's/./&\
/g' file | sort | uniq -c | sort -nr
o para evitar la división visual en la pantalla, insertar una nueva línea literal por tipo CTRL + V CTRL + J
sed -e's/./&\^J/g' file | sort | uniq -c | sort -nr
- 1. Contando la frecuencia de cada letra en una cadena
- 2. script bash para encontrar archivos antiguos basados en la fecha en el nombre de archivo
- 3. Bash Script - Leer archivo binario
- 4. ¿Script de shell para agregar texto a cada archivo?
- 5. Obtener el directorio de un archivo de script bash en
- 6. Archivo de registro de script Bash para mostrar continuamente
- 7. Script Bash para ejecutar el script php
- 8. Script Bash: uso del comando "script" de un script bash para iniciar sesión
- 9. Frecuencia de recuento de letras en un archivo de texto
- 10. ¿Cómo procesar cada segundo archivo en bash?
- 11. cómo encontrar la metainformación de un archivo usando BASH
- 12. Script Bash para scp el archivo más nuevo en un directorio en un servidor remoto
- 13. C# - Reemplazar cada letra UpperCase con subrayado y la letra
- 14. Obtenga la frecuencia de un archivo de audio cada 1/4 segundos en android
- 15. mayúscula la primera letra de cada palabra
- 16. Uso de la "pantalla alternativa" en un script bash
- 17. ejecutando un script bash desde un archivo make
- 18. Script bash de autodejección
- 19. Secuencia de comandos para encontrar duplicados en un archivo csv
- 20. Bash script ¿Qué es: = para?
- 21. Validación de parámetros en un script Bash
- 22. Prueba de un script de shell bash
- 23. Script Bash para probar automáticamente la salida del programa - C
- 24. ¿Cómo crear un script bash para verificar la conexión SSH?
- 25. modificar el archivo de configuración usando el script bash
- 26. ¿Cómo sé el nombre del archivo de script en un script Bash?
- 27. ¿Paralelizar procesos PHP con un script Bash?
- 28. Cambiar la primera letra de cada línea de un archivo a mayúscula
- 29. Bash: ejecutar script en el archivo de guardar?
- 30. ¿Cómo obtener la primera letra en una variable de Bash?
¿Por qué usa bash para esto? –
¡Encontré esta pregunta de programación en alguna parte! Supongo que Perl sería la mejor alternativa, ¿no? – SkypeMeSM