Список точного количества строк в файле

Список точного количества строк в файле
  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 

У меня есть файл, как показано, но в большем масштабе. Моя цель — вывести количество 111, 1, 11, 1111 и т. д. в файле. Я видел много постов, в которых говорилось о том, чтобы сделать:

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

Все они либо ничего не вывели, либо вывели весь файл. Что мне сделать, чтобы вывести только определенные числа?

решение1

Используя tr, sortи uniq:

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

Это также даст вам количество пустых строк (первая строка в выводе выше), но вы можете избежать этого с помощью sed:

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

Конвейер заменяет все пробелы на символы новой строки, сортирует полученные строки и подсчитывает количество вхождений каждой строки.

решение2

Я бы не использовал grep для этого, а использовал 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

Эта однострочная демонстрация должна работать со всем вашим файлом (замените <<<"$a"на yourfile)

Связанный контент