Как я могу подсчитать частоту строк среди многих файлов?

У меня много (т. Е. >> 2) текстовых файлов. Эти файлы в основном похожи, но имеют небольшие различия между ними. Я хотел бы найти строки, которые чаще всего появляются среди этих файлов. Например, вот тип информации, которую я ищу (я только забочусь о данных, никоим образом не требуется какое-либо конкретное форматирование):

$ cat file1 line1line1line1 line2line2line2 line3line3line3 $ cat file2 line1line1line1 line2line2line2 $ cat file3 line1line1line1 line3line3line3 $ cat file4 line4line4line4 $ my_awesome_script file{1,2,3,4} count | line ------+---------------- 3 | line1line1line1 2 | line2line2line2 2 | line3line3line3 1 | line4line4line4 

Существуют некоторые общие инструменты для выполнения подобных задач, однако они имеют некоторые ограничения:

  • comm – может сравнивать только два файла одновременно; выбрасывает строки, которые не отображаются в обоих файлах
  • grep -f – отбрасывает строки, которые не совпадают
  • grep -c – подсчитывает совпадения, но выводит общее количество на файл и отбрасывает информацию о том, какие шаблоны ввода совпадают

Для разъяснения, если строка появляется несколько раз в одном файле, я считаю это только одним совпадением. Мне просто интересно, сколько файлов появляются в строках, а не сколько раз строк отображаются в целом.

  • Как заставить скрипт принимать несколько аргументов?
  • grep до соответствия скобкам
  • Изменяйте определенные байты во многих файлах
  • Создание каталогов из строк файла
  • Список каталогов, затем файлы - с одной командой?
  • Передача аргументов из файла в сценарий bash
  • проанализировать действительно простую грамматику разметки со сценарием оболочки
  • Выделение подстроки с помощью expr
  • One Solution collect form web for “Как я могу подсчитать частоту строк среди многих файлов?”

    Что-то вроде этого должно делать то, что вы хотите:

     #! /bin/sh for f in ./file*; do sort -u "$f" done | \ sort | \ uniq -c | \ sort -rn | \ head -40 

    Точка for – убедиться, что каждая строка подсчитывается только один раз для каждого файла. Точка остальной части конвейера должна подсчитывать события.

    Interesting Posts

    Проверка, является ли входной номер целым числом

    Преобразование файла машинописного текста в список команд (история)

    Что более идиоматично в сценарии bash: `|| true` или `|| : `?

    Почему konsole читает / etc / passwd?

    Как создать Linux-диск с фиксированным размером, который никогда не заменяется на диск?

    Bash и вкладка Auto-complete

    Как удалить <? Xml в * начале строки * с sed?

    ffmpeg: ошибка при загрузке разделяемых библиотек: libtheoraenc.so.1

    как заставить aspell игнорировать слова верхнего регистра (акронимы)?

    Связывание / proc / mnt в / proc / mounts

    Как получить сервис, который гарантирует, что программа будет работать?

    Как ключи сеанса, общедоступные / частные ключи, сгенерированные на сервере и клиенте ssh, и используются?

    Получить последнее сообщение фиксации, автор и хеш с помощью git ls-remote, как команда

    ssh settings `allowopen =" localhost: 4000 "` не ограничивает перенаправление удаленных портов

    Что такое формат почтового ящика unix?

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