Necesito contar la cantidad de ocurrencias de un char en una cadena usando Bash.
En el siguiente ejemplo, cuando el carácter es (por ejemplo) t
, echo
es el número correcto de ocurrencias de t
in var
, pero cuando el carácter es coma o punto y coma, imprime cero:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
Respuestas:
Usaría el siguiente
awk
comando:Estoy dividiendo la cadena
$char
e imprimo el número de campos resultantes menos 1.Si su shell no es compatible con el
<<<
operador, useecho
:fuente
$(grep -o "$needle" < filename | wc -l)
wc -l
, solo usegrep -c
, funciona tanto en bsd grep como en linux grep.grep -c
solo generará el número de líneas coincidentes. No cuenta múltiples coincidencias por línea.Puede, por ejemplo, eliminar todos los otros caracteres y contar los restos, como:
imprimirá
o
o
o
o
o
fuente
y="${x//[^s|S]}"; echo "${#y}"
wc
? ¡Golfs!echo -n some line | wc -l
tr -dc ',' <<<"$var" | wc -c
Puedes hacerlo combinando
tr
ywc
comandos. Por ejemplo, para contare
en la cadenareferee
salida
Explicaciones: Command
tr -cd 'e'
elimina todos los caracteres que no sean 'e', y Commandwc -c
cuenta los caracteres restantes.Varias líneas de entrada también son buenas para esta solución, como el comando
cat mytext.txt | tr -cd 'e' | wc -c
puede contare
en el archivomytext.txt
, incluso si el archivo puede contener muchas líneas.fuente
Basándose en las excelentes respuestas y comentarios de todos, esta es la versión más corta y dulce:
grep -o "$needle" <<< "$haystack" | wc -l
fuente
awk funciona bien si tu servidor lo tiene
fuente
awk -F,
busca a,
. Puede hacer lo siguiente:awk -F"${your_char}"
Sugeriría lo siguiente:
No llame a ningún otro programa
fuente
también mira esto, por ejemplo queremos contar
t
o en
python
o incluso mejor, podemos hacer que nuestro script sea dinámico con
awk
en este caso la salida es así:
fuente