Использование каждой строки вывода awk в качестве шаблона grep - PullRequest
4 голосов
/ 27 апреля 2011

Я хочу найти каждую строку файла, которая содержит любую из строк, содержащихся в столбце другого файла.

Я пробовал
grep "$(awk '{ print $1 }' file1.txt)" file2.txt
, но это просто выводит файл2.txt в полном объеме.

Я знаю, что делал это раньше с помощью шаблона, найденного на этом сайте, но больше не могу найти этот вопрос.

Ответы [ 3 ]

8 голосов
/ 28 апреля 2011

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

grep "$(awk '{if (NF > 0) print $1}' file1)" file2

И если файл с шаблонами представляет собой просто набор шаблонов на строку, то его намного более простой вариант:

grep -f file1 file2

Это заставляет grep использовать строки в файле1 в качестве шаблонов.

2 голосов
/ 29 апреля 2011

Там нет необходимости использовать grep, когда у вас есть awk

awk 'FNR==NR&&NF{a[$0];next}($1 in a)' file2 file1
0 голосов
/ 28 августа 2018

$ (awk '{print $ 1}' file1.txt) | grep text> file.txt

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