Вы можете сделать это с помощью подстановки процесса следующим образом:
grep -f <(awk '{print $1 "\n" $3}' filename) otherfile
Это заставит grep
прочитать свои шаблоны из файла (флаг -f
), который в данном случае фактически результат процесса awk ... filename
, который печатает шаблоны по одному в строке. Затем grep ищет эти шаблоны в otherfile
. Хотя, возможно, менее эффективно, если вы действительно хотите сделать это в конвейере, вы можете сделать это с помощью grep
, читающего его шаблоны из стандартного ввода, например
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
Una declaración if aceptará cualquier cosa que produzca un estado de salida, por lo que una Shell incorporado como [
otest
-o un archivo de disco como grep
. Puedes usar ambos:
if [ "$(grep -c '*' file)" = 0 ]
then
echo 'star symbol not found'
fi
pero realmente no es necesario:
if ! grep -q '*' file
then
echo 'star symbol not found'
fi
O:
while read x
do
if ! grep -q '*' <<eof
$x
eof
then
printf '%s does not contain star symbol\n' "$x"
fi
done < file
O:
awk '!/\*/ {print $0, "does not contain star symbol"}' file