grep и напечатать, сколько раз мой шаблон в файле 1 присутствует в файле2

У меня есть файл1 (список моего шаблона), например:

file1

Fatty_acid_degradation Aminobenzoate_degradation Amino_sugar_and_nucleotide_sugar_metabolism Amoebiasis 

и у меня есть файл2 (список всех шаблонов).

file2

 Fatty_acid_degradation Fatty_acid_degradation Fatty_acid_degradation Bacterial_invasion_of_epithelial_cells Bacterial_invasion_of_epithelial_cells Bacterial_invasion_of_epithelial_cells Bacterial_invasion_of_epithelial_cells 

Я хотел бы grep и подсчитать, сколько раз каждый из моих шаблонов в файле1 присутствует в файле2 и получает таблицу (разделяемую вкладку) следующим образом:

 Fatty_acid_degradation 3 

  • Есть ли способ изменить файл на месте?
  • bash merge 2 списки удаления дубликатов
  • Как использовать тройник для перенаправления на grep
  • Подавлять сообщения об усечении файла при использовании хвоста
  • «Греп ломается, заставляя процесс загрузки вешать вечно»
  • Грепируйте линии между появлением одного и того же шаблона
  • Как найти строки, содержащие более 100 символов, и содержит «if»?
  • Как удалить строку из тега в сценарии оболочки?
  • 4 Solutions collect form web for “grep и напечатать, сколько раз мой шаблон в файле 1 присутствует в файле2”

    Самый простой подход состоял бы в том, чтобы grep каждого из шаблонов, а затем посчитать их:

     $ grep -Fwf file1 file2 | sort | uniq -c 3 Fatty_acid_degradation 

    Параметры grep : -f чтобы предоставить файл в виде списка шаблонов для поиска, -F чтобы указать, что шаблон следует рассматривать как строку, а не регулярное выражение, и -w чтобы гарантировать, что шаблон сопоставляется только с целым слова (так что выражение regulation_of_expression не сопоставляется с upregulation_of_excpression например).

    Затем вы можете использовать любой инструмент, который вы предпочитаете изменить формат:

     $ grep -Fwf file1 file2 | sort | uniq -c | sed -r 's/.*([0-9]+) *(.*)/\2\t\1/' $ grep -Fwf file1 file2 | sort | uniq -c | perl -lane 'print "$F[1]\t$F[0]"' $ grep -Fwf file1 file2 | sort | uniq -c | awk -vOFS="\t" '{print $2,$1}' 

    Все приведенное выше возвращение

     Fatty_acid_degradation 3 
     grep -f file1 file2 | sort | uniq -c 

    Это дает результат в формате:

      3 Fatty_acid_degradation 

    Можете ли вы с этим жить?

    так много быстрого ответа, заставляют меня чувствовать себя неловко …

     awk 'FNR == NR { pat[$1]=0 ; next ; } { if ( $0 in pat ) pat[$0]++ ; } END { for ( p in pat ) if ( pat[p]) printf "%s %d\n",p,pat[p] ;}' f1 f2 

    где

    • FNR == NR { pat[$1]=0 ; next ; } FNR == NR { pat[$1]=0 ; next ; } шаблон записи в массиве pat
    • { if ( $0 in pat ) pat[$0]++ ; } { if ( $0 in pat ) pat[$0]++ ; } всякий раз, когда вы соответствуете, подсчитывайте
    • END { for ( p in pat ) if ( pat[p]) printf "%s %d\n",p,pat[p] ;} в конце, сбрасывает ненулевой счет

    Вы также можете попробовать следующее решение с помощью Python:

     #!/usr/bin/env python2 import collections with open('file_1') as f1, open('file_2') as f2: counts = collections.Counter(f2) for line in f1: if line in counts: print line.rstrip() + '\t' + str(counts[line]) 

    Здесь мы использовали модуль collections Counter который будет генерировать словарь, содержащий вхождения каждого элемента итерабельного.

    Interesting Posts

    Как создать резервную копию всего xen dom0 (на debian)

    Попытка запускать команду при загрузке, но не работает

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

    Использование archlinux для vmware error 8000

    libvirt qemu не может получить доступ к изображению внутри моего домашнего каталога, даже как root?

    Почему я не могу импортировать пул ZFS без разделения диска данных на fdisk?

    Как заставить hgk работать на RedHat Linux?

    grep определенная строка из вывода

    Возможно ли переносить VM на металл?

    Как включить журнал трассировки для ALSA hda_unsol_event?

    Лучше использовать локальный запуск rm -rf вместо nfs?

    Логфайлы для не заканчивающихся процессов

    Запуск сценария (для графического интерфейса приложения) при регистрации в NX, но ограничение команд оболочки на терминале

    Почему я не могу использовать расширение вкладки / автозаполнение переменных оболочки с помощью cd?

    Какова стандартная или наиболее часто используемая модель многопроцессорности в Linux? Симметричный или асимметричный?

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