Número de la misma línea en cada file de text

Tengo más de 30 files de text diferentes y cada uno de ellos tiene una misma palabra que repite time diferente, por ejemplo en text1 "esr" repetido 12 veces y en text2 "esr" repetido 21 veces.

¿Es posible emitir el número de veces que la palabra se repite por separado con un command?

Con la tubería grep + wc :

 for f in *.txt; do echo -n "$f "; grep -wo 'esr' "$f" | wc -l; done 

Opciones de grep :

  • -w – word-regexp (para emparejar palabra completa / separada)

  • -o – imprime solo subcadenas coincidentes


  • wc -l : cuente el número de líneas (palabras coincidentes en nuestro caso) para cada file
 strings ./*.txt|tr " " "\n"|sort|uniq -c 

Use grep para encontrar todas las instancias, luego cuente líneas únicas usando uniq -c .

 grep "word" * | sort | uniq -c 

Si desea coincidencias por file de input, use grep -c :

 grep -c "word" * 
 for name in file*.txt; do printf 'Pattern occurs %d times in "%s"\n' "$(grep -wo 'pattern' "$name" | wc -l)" "$name" done 

Si desea contar cada palabra en cualquier cantidad de files, podría usar AWK por ejemplo:

 awk 'BEGIN{RS="[[:space:]]+"} {counts[$0]++} END{for(word in counts){print word " - " counts[word]} ' file1 file2 file... 

Esto trata un file como si cada palabra estuviera en una línea separada, esa es la parte BEGIN{RS="[[:space:]]+"} , luego count cada vez que ve una línea . La eliminación de la parte BEGIN contará cada línea normal .

Si solo está interesado en 1 palabra específica, puede cambiar el bloque END para que se vea algo así como:

 END{print counts["esr"]} 

Que imprimiría solo las veces que aparece "esr", pero recuerde que esto distingue entre mayúsculas y minúsculas.

Para eliminar la distinción entre mayúsculas y minúsculas, utilice counts[tolower($0)]++ o counts[toupper($0)]++ .

Se pueden agregar cheques para imprimir datos cuando el recuento va de un file al siguiente también.