Я бы проигнорировал grep
это. Это хорошо для регулярных выражений, но, похоже, вам это здесь не нужно. comm
Можно сравнить два файла и показать вам пересечения. Используя ваши точные примеры:
$ comm -12 list.txt output.txt
a.1
b.1
etc
Это быстрее, чем любой другой grep, но в значительной степени зависит от сортируемых файлов. Если это не так, вы можете предварительно отсортировать их, но это изменит выходные данные, поэтому они также будут отсортированы.
comm -12 <(sort list.txt) <(sort output.txt)
Кроме того, этот ответ от iiSeymour позволит вам сделать это grep
. Флаги запрашивают входной файл и инициируют поиск по полной строке с фиксированной строкой. Это не зависит от заказа, но будет основано на output.txt
заказе. Обратитесь к файлам, если вы хотите их в порядке list.txt.
$ grep -wFf list.txt output.txt
a.1
b.1
etc
Если ваш list.txt
является действительно большим, то вы , возможно , придется решать эту немного больше итеративно и передать каждую строку Grep отдельно. Это значительно увеличит время обработки. Выше вы могли бы читать output.txt
один раз, но таким образом вы читали и обрабатывали его для каждой строки list.txt. Это ужасно ... Но это может быть ваш единственный выбор. С другой стороны, он сортирует вещи по list.txt
порядку.
$ while read line; do grep -wF "$line" output.txt; done < list.txt
a.1
b.1
etc