Перебирать содержимое текстового файла, чтобы найти совпадение во 2-м текстовом файле (Mac OS или Linux)

#linux #macos #parsing #text-parsing #txt

#linux #macos #синтаксический анализ #синтаксический анализ текста #текст

Вопрос:

Я искал сайт и не мог найти то, что мне нужно. У меня есть два файла .txt, каждый с одним значением в каждой строке, разделенной разрывом строки.

1-й текстовый файл 2-й текстовый файл
значение 1 значение 3
значение2 значение 4
значение 3 значение 5
значение 6
значение 7
значение 8

В Mac OS или Linux, как мне перебирать каждую строку 1-го файла .txt и находить соответствующее значение во 2-м файле .txt? В идеале я хотел бы вывести final.txt это показывает только те значения, которые были найдены.

Любая помощь приветствуется! Заранее спасибо!

Ответ №1:

 grep -o -f 1sttxtfile 2ndtxtfile >  final.txt
 

Используйте содержимое первого файла в качестве условий поиска для поиска во втором файле с помощью флага -f. Выводите только совпадения с помощью -o

Комментарии:

1. Здесь -o это не обязательно. -o указывает grep показывать для каждой совпадающей строки только ту ее часть, которая соответствует шаблону поиска, а не всю строку. Но в этом случае совпадающая «часть» — это целая строка, поэтому -o это не имеет никакого эффекта.

Ответ №2:

Вы можете сделать это следующим образом: a.txt это левый файл и b.txt это правильный файл. Запустите это в терминале, в той же папке, в которой находятся файлы:

 for token in `cat a.txt`                                                      
do 
    grep $token b.txt
done
 

Если вы хотите вывести вывод в файл, вы можете добавить tee, например:

 for token in `cat a.txt`
do 
    grep $token b.txt | tee -a final.txt
done
 

Комментарии:

1. Работает, но выбран другой ответ из-за его однострочного ответа. Все любят хорошую однострочную строку. 🙂

2. В одной строке: for token in `cat a.txt`; do; grep $token b.txt; done

3. Спасибо @stalet! 🙂 Немного больше читаю, и кажется, что консенсус заключается в том, что grep — более быстрый процесс, но спасибо!