O script a seguir está compilando file1.txt
em uma única regex para grep -E
.
#!/bin/sh
regex="^($(awk '{printf $0"|"}' $1) )+\$"
grep -E "$regex" $2
Uso:
$ ./script.sh file1.txt file2.txt
SORTED_RECIPS HFILTER_HELO_5
$regex
é compilado a partir de file1.txt
da seguinte forma:
^(ME_HTML_ONLY|SUSPICIOUS_RECIPS|SORTED_RECIPS|HFILTER_HELO_5| )+$
Para milhares de file1.txt
e file2.txt
com milhões de linhas, seria melhor compilar todo o file1.txt's
em um único programa awk com o seguinte script:
#!/bin/sh
for i; do
regex="^($(awk '{printf $0"|"}' $i) )+\$"
echo "/$regex/ { print \"$i: \"\$ ./script2.sh match*.txt
/^(ME_HTML_ONLY|SUSPICIOUS_RECIPS|SORTED_RECIPS|HFILTER_HELO_5| )+$/ { print "match1.txt: "$0 }
/^(HFILTER_FROM_BOUNCE|FORGED_OUTLOOK_HTML|ANY_OTHER_WORD| )+$/ { print "match2.txt: "$0 }
/^(SORTED_RECIPS|HFILTER_HELO_5|MIME_HTML_ONLY|HFILTER_FROM_BOUNCE| )+$/ { print "match3.txt: "$0 }
$ ./script2.sh match*.txt >match.awk
$ awk -f match.awk file2.txt
match2.txt: HFILTER_FROM_BOUNCE FORGED_OUTLOOK_HTML
match1.txt: SORTED_RECIPS HFILTER_HELO_5
match3.txt: SORTED_RECIPS HFILTER_HELO_5
match3.txt: MIME_HTML_ONLY HFILTER_FROM_BOUNCE
}"
done
Por exemplo, ( file1.txt's
são nomeados como match1.txt
match2.txt
match3.txt
):
#!/bin/sh
regex="^($(awk '{printf $0"|"}' $1) )+\$"
grep -E "$regex" $2