#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 — более быстрый процесс, но спасибо!