Соответствие двух файлов по строкам?

У меня два файла, состоящих из чисел. Теперь я хочу совместить строку первого файла со всей строкой второго файла и увеличивать счетчик, если совпадение найдено. Как написать скрипт bash для этого?

file1: 1 2 3 4 5 6 file2: 2 3 6 10 12 13 23 counter = 3 

One Solution collect form web for “Соответствие двух файлов по строкам?”

Предполагая, что file1.txt и file2.txt имеют наборы чисел вроде этого:

file1.txt :

 1 2 4 6 7 

file2.txt :

 2 6 7 8 9 

Вы можете попробовать несколько подходов в зависимости от того, что вы хотите делать с данными или что еще вы хотите собрать на этом пути.

  • Grep может выполнять поиск по файлу для строки шаблона. Шаблоны могут быть предоставлены с использованием другого файла с использованием флага -f . Флаг -x также гарантирует, что вы найдете только целые строки, чтобы шаблон «2» не соответствовал «24». Наконец, флаг -c подсчитывает количество совпадений. Соединяя все это, вы бы получили:

     grep -x -c -f file1.txt file2.txt 
  • Если вы хотите делать другие вещи с номерами по пути другого, которые получают общее количество, вы можете взять более ручной подход:

     counter=0 while read number; do grep -q -x "$number" file2.txt && let counter=$counter+1 done < file1.txt echo $counter 

    Это намного менее эффективно, так как вы снова читаете file2.txt для каждой строки файла file1.txt, но если вы также хотели делать другие вещи с номером или манипулировать файлом, то по пути было бы проще напасть на цикл, например что. Не использование флага -q поэтому grep не работает и возвращает код выхода. Используя этот код, мы можем определить, было ли найдено совпадение или нет, и только увеличивать счетчик, если он был.

В любом случае вы работаете с этим, убедитесь, что вы учитываете возможность того, что некоторые строки будут частичными совпадениями для чисел, которые являются подстроками других чисел. Также вам нужно подумать о том, что вы хотите, если в каждой строке есть несколько совпадений. Каждый дубликат увеличивает счетчик или это происходит только один раз. Обратите внимание, что два варианта выше относятся к этому по-другому! Для некоторых наборов данных они будут давать разные результаты. Если вы хотите, чтобы они дали одинаковые результаты, можно было бы адаптировать оба метода. Например, первый может проверить версию файла, у которого все дубликаты удалены, поэтому ничто не будет соответствовать более одного раза:

  grep -x -c -f <(sort -u file1.txt) <(sort -u file2.txt) 
  • Наложение текста на вкладку экрана только после загрузки оболочки
  • bash custom builtin
  • Добавление одного файла в другой
  • Чтение вывода в `screen` извне
  • Запуск сценария bash в сценарии bash
  • Получить возвращаемое значение сценария подкласса
  • Как переключиться с неизвестной оболочки на bash?
  • &> перенаправление не работает правильно
  • Выполнить команду в нескольких активных оболочках одновременно
  • Как избежать $ здесь
  • Как мне избежать имени подкаталога с амперсандом в нем?
  • Interesting Posts

    Исправить неработающие разрешения на / var (или любой другой системный каталог)

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

    sox возвращает ошибку, когда я пытаюсь обрабатывать mp3-файлы

    воспроизведение аудио не начинается с начала

    Сделать скрипт исполняемым из vi / vim

    Могу ли я заразиться в этом случае, если я запустил live cd?

    nfs-kernel-server запускается слишком рано

    Установка настольного ПК на удаленном сервере Centos 6.3

    Почему в команде bash отсутствуют псевдонимы?

    Найти файлы, которые пользователь может писать, эффективно с минимальным процессом создания

    VBox на безголовом сервере: установить linux без RDP

    Что означает значение знака (-)?

    SSH не может подключиться с удаленного компьютера через некоторое время

    Получение символических ссылок, чтобы вести себя как ярлыки в Windows

    Компромиссный сервер с вредоносным ПО "/ usr / bin / fuck" и "/usr/bin/fake.cfg"

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