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

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 

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

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

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

  • Устранение неполадок команды grep
  • bash: содержание grepping столбца, которое является динамическим
  • Синтаксис синтаксиса «grep» для BRE или ERE содержит синтаксис «синтаксиса регулярных выражений» 8.5.6 'в справочнике findutils?
  • Количество файлов, содержащих заданную строку
  • Сравните второй столбец 1-го файла и 1-й столбец второго файла и распечатайте сопоставленные записи 1-го файла
  • Как извлечь определенное значение из файла журнала и перенести его в другой файл
  • grep только для строк процесса, которые вызвали ошибку
  • grep first n и последние n символов из строки в файле
  • 2 Solutions collect form web for “Список точных строк в файле”

    Используя 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 

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

    Я бы не пошел с 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 )

    Linux и Unix - лучшая ОС в мире.