передача результатов команды awk в качестве параметра

Предположим, что я использовал awk для получения значения двух разных столбцов:

Скажем, выход:

азбука

Защита

Теперь я хочу использовать abc и def как шаблоны для grep , используя конвейер с предыдущей командой. Есть какой-либо способ сделать это?

Для уточнения:

У меня есть файл в формате pdf, и я ищу ключевое слово в файле, используя:

 pdftotext 'filename.pdf' - | grep 'pattern' 

Теперь, если найдено какое-либо совпадение, я хочу использовать первый и второй столбцы результата в качестве параметров grep в конвейере с предыдущей командой. Я могу получить первые два столбца, используя

 pdftotext 'filename.pdf' - | grep 'pattern' | awk '{ print $1, "\t"$2 }' 

Теперь, как я буду передавать эти два значения снова (2-й раз) как шаблоны после команды grep в конвейере с указанным выше?

4 Solutions collect form web for “передача результатов команды awk в качестве параметра”

Вы можете сделать это с заменой процесса следующим образом:

 grep -f <(awk '{print $1 "\n" $3}' filename) otherfile 

Это приведет к тому, что grep прочитает свои шаблоны из файла (флага -f ), который в этом случае фактически является результатом процесса awk...filename который печатает шаблоны по одному в каждой строке. Затем grep-поиски для этих шаблонов в otherfile

Хотя, возможно, менее эффективно, если вы действительно хотите сделать это в конвейере, вы можете сделать это с помощью grep читающего его шаблоны из stdin, как

 awk '{print $1 "\n" $3}' filename | grep -f - otherfile 

Изменить: видя редактирование вашего вопроса об использовании grep, а затем awk, вы можете позволить awk выполнить шаблон для вас, выполнив:

 grep -Ff <(awk '/pattern/ {print $1 "\n" $3}' <(pdftotext 'filename.pdf' -)) otherfile 

или как трубопровод:

 pdftotext 'filename.pdf' - | awk '/pattern/ {print $1 "\n" $3}' | grep -Ff - otherfile 

Многие оболочки поддерживают подстановку команд, так что, например,

 p=$(awk '{ print $1,$3 }' filename) 

захватывает вывод команды awk '{ print $1,$3 }' filename в переменную p . Обратите внимание, что ваша cat избыточна здесь: awk может читать непосредственно из filename .

Тем не менее, я подозреваю, что вы действительно хотите сделать, это последовательные строки вывода awk и проанализировать их на отдельные переменные. Если это так, вы можете сделать что-то вроде

 awk '{print $1,$3}' filename | while read -r p1 p2; do grep -F "$p1" otherfile | grep -F "$p2"; done 

найти строки в otherfile которые соответствуют обоим полям $1 и $3 от filename .

Это можно сделать с помощью подстановки команд.

Цитируя отсюда :

Подстановка команды позволяет заменять вывод команды вместо имени команды. Подстановка команды происходит, когда команда заключена в следующем порядке:

$(command)

или (backquoted version):

`command`

Вы можете узнать, как использовать xargs для передачи и определения параметров.

 cat filename|awk '{print $1,"\n"$3}'|xargs -I {} grep {} somefile 

xargs -I {} замените параметр на "{}", чтобы использовать grep

  • Функция проверки переменной BASH
  • Как вычесть строки, наоборот, только если больше, чем предыдущая строка
  • Вставка строки в файл только в том случае, если эта строка еще не является частью файла
  • Команда запускается из оболочки, но не запускается из сценария.sh
  • Найдите конкретную вложенность имен каталогов, например ... / project / dir1 / dir2
  • Объединение аргументов bash в одну строку с пробелами
  • Как предотвратить удаление скрипта
  • Почему это сравнение не равно?
  • Стандартный / канонический способ проверить, выводит ли предыдущий трубопровод выпуск?
  • grep -Ef для захвата соответствующих ip-адресов в двух файлах, а также результат печати или эха каждой итерации, xx.xx.xx.xx found или xx.xx.xx.xx не найден
  • SSH дважды и запустить команду, экранируя символ?
  • Interesting Posts

    Долгосрочное решение для запуска 3D-приложений на виртуальной машине или контейнере

    Почему эта составная команда {…} не выходила при ошибке, когда используется с ||?

    Как вызвать dhcp4-change с помощью nmcli?

    Простой иерархический список задач (который позволяет вам перечеркнуть задачи) для linux в репозиториях Ubuntu?

    Bash зафиксировать любую ошибку, например -e, но не выходить, сделать что-то еще

    Не удается открыть как корневой терминал, так и nautilus (в Debian 7) после обновления графического драйвера Intel

    Запрашивать ls только список файлов в пути, который соответствует определенному glob / regex

    Разница между «echo $ SHELL» и «which bash»

    Действительно ли `dd` действительно необходимо клонировать диск?

    lshw и lscpu не согласны с кешами – что правильно?

    Как маршрутизировать пакеты между частными сетями в Linux?

    Как скопировать файлы с помощью scp с удаленного хоста, когда файл имеет пробелы

    sshd сбрасывает соединения на другом порту

    Команда «ip» пакета iproute2

    Xkbmap переписывает Xmodmap

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