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

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... 

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

  • grepping переменная и добавление 1 к ней
  • Вывод, который будет сохранен в файле с именем, аналогичным входному файлу
  • Получение уникальных строк с соответствующими строками
  • Соответствовать регулярному выражению между разделителями
  • cut / grep и df -h
  • grep --color = auto breaks, когда ^ M находится внутри цветного соответствия
  • grep -v неожиданное поведение
  • В чем разница между `grep`,` egrep` и `fgrep`?
  • Каковы точные различия между awk и cut с grep?
  • Стирание двухстрочного шаблона с sed / grep / whatever
  • Как вставить содержимое файла в строку в bash
  • grep путается именами файлов с тире
  • 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 - лучшая ОС в мире.