Pregunta:
Me preguntaba cómo contar el número de un carácter específico en cada línea mediante algunas utilidades de procesamiento de texto.
Por ejemplo, para contar "
en cada línea del siguiente texto
"hello!"
Thank you!
La primera línea tiene dos y la segunda línea tiene 0.
Otro ejemplo es contar (
en cada línea.
Respuesta:
Puedes hacerlo con sed
y awk
:
$ sed 's/[^"]//g' dat | awk '{ print length }'
2
0
Donde dat
es su texto de ejemplo, sed elimina (para cada línea) todos los caracteres que no sean "
y awk
imprime su tamaño para cada línea (es decir, la length
es equivalente a la length($0)
, donde $0
denota la línea actual).
Para otro carácter solo tienes que cambiar la expresión sed. Por ejemplo para (
para:
's/[^(]//g'
Actualización: sed
es una especie de exageración para la tarea: tr
es suficiente. Una solución equivalente con tr
es:
$ tr -d -c '"\n' < dat | awk '{ print length; }'
Lo que significa que tr
borra todos los caracteres que no están ( -c
significa complemento) en el conjunto de caracteres "\n
.