Puesto que usted tiene un par de nombres, las expresiones regulares es el camino a seguir éste. Al principio pensé que era tan simple como un simple conteo de grep en la expresión regular de Joe o Tom, pero creo que esto no explicaba el escenario en el que Tom y Joe están en la misma línea (o tom y tom para el caso) .
prueba.txt:
tom is really really cool! joe for the win!
tom is actually lame.
$ grep -c '\<\(tom\|joe\)\>' test.txt
2
Como se puede ver en el archivo test.txt, 2 es la respuesta equivocada, por lo que necesita para dar cuenta de los nombres de estar en la misma línea.
Luego utilicé grep -o para mostrar solo la parte de una línea coincidente que coincide con el patrón donde dio las coincidencias de patrón correctas de tom o joe en el archivo. Luego canalicé los resultados en número de líneas en wc para el recuento de líneas.
$ grep -o '\(joe\|tom\)' test.txt|wc -l
3
3 ... la respuesta correcta! Espero que esto ayude
grep cuenta las líneas, no las palabras. ¿Una línea con 'tomtom' en ella cuenta como uno o como dos? – tchrist
¿Qué es exactamente lo que quieres? Múltiples recuentos, uno por cada palabra que especificó? ¿Suma de recuentos para todas las palabras que especificó? ¿Qué es "palabra"? Como ya mencionamos, tu ejemplo cuenta el número de líneas que coinciden con una expresión regular, no con el número de palabras. – GreyCat