Listar el número de cadenas exactas en un archivo

Listar el número de cadenas exactas en un archivo
  11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1 

Tengo un archivo como se muestra pero a mayor escala. Mi objetivo es generar la cantidad de 111, 1, 11, 1111, etc. están en el archivo. He visto muchas publicaciones hablando de hacer:

grep "\^word\" text_file
grep "\bword\b" text_file
grep -Fx "word" text_file
and so on...

Todos ellos no han generado nada o han generado el archivo completo. ¿Qué debo hacer para enumerar solo ciertos números?

Respuesta1

Usando tr, sorty uniq:

$ tr -s ' ' '\n' <file | sort | uniq -c
   1
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

Esto también le proporciona un recuento de una línea vacía (la primera línea en el resultado anterior), pero puede evitarlo con sed:

$ tr -s ' ' '\n' <file | sed '/^$/d' | sort | uniq -c
  17 1
   5 11
   1 111
   2 11111
   1 1111111
   1 11111111

La canalización cambia todos los espacios a nuevas líneas, ordena las líneas resultantes y cuenta el número de apariciones de cada línea.

Respuesta2

No usaría grep para este sino con awk:

$ a="11111  1  11  1111111    1 1  1  1 1 1 1  111 1  1 1  1  11 11111111   1    11 1 11 11  1 11111   1 1"

$ awk '{for (i=1;i<=NF;i++) ++seen[$i]}END{for (k in seen) print k,"found:"seen[k]}' <<<"$a"
1 found:17
11 found:5
111 found:1
11111 found:2
1111111 found:1
11111111 found:1

Esta demostración de una sola línea debería funcionar con todo el archivo (reemplazar <<<"$a"con yourfile)

información relacionada