Esta é uma solução awk pura que funciona para dois padrões por linha (delimitada por espaço) no arquivo de padrões com a operação lógica AND:
awk 'NR==FNR{patts[$1]=$2;next}{for (i in patts) if (($0 ~ i) && ($0 ~ patts[i])) print}' patterns file
Atualizar :
Para palavras em vez de correspondência de expressões regulares, você pode avaliar esta alternativa:
awk 'NR==FNR{patts[$0]="\<" $1 "\>.*\<" $2 "\>|\<" $2 "\>.*\<" $1 "\>";next} \
{for (i in patts) if ($0 ~ patts[i]) print}' patterns file1
Na verdade, ele está transformando o padrão 833 7777
em \<833\>.*\<7777\> | \<7777\>.*\<833\>
, o que torna a correspondência de palavras e simula também o AND lógico para os dois padrões.
Esta solução é testada e não corresponde a registros como G 77771 2833
Atualização No2
Isso garantirá correspondência de palavras, operação lógica AND e impressão por grupos combinados com string separadora.
awk 'NR==FNR{patts[$0]="\<" $1 "\>.*\<" $2 "\>|\<" $2 "\>.*\<" $1 "\>";next} \
{for (i in patts) {if ($0 ~ patts[i]) !found[i]?found[i]=$0:found[i]=found[i] ORS $0}} \
END{for (k in found) {print found[k];print "-----"}}' patterns file1
#Output
A 833 0 0 0 0 7777 0 0 0 0
F 7777 833
-----
D illicit Jam fox 33333
-----
C the cow jumps over the 311 moon 2222
-----
PS: Devido à maneira awk de trabalhar com matrizes associativas, não podemos afetar na seção END a impressão da matriz encontrada. Será de alguma forma "aleatório".