Por que campos de pesquisa um por um? Por que não pesquisar linhas inteiras de cada vez?
grep -f find.txt path_to_100_files/*
Atualmente estou usando
$ awk 'NR==FNR{a[$1];next} ($3 in a)' find.txt path_to_100_files/*
que usa strings find.txt para pesquisar vários arquivos em path_to_100_files / para correspondências.
find.txt contém
[email protected]
[email protected]
e, em seguida, path_to_100_files / contém arquivos como
0.0.0.0:002921931:[email protected]
123.0.0.1:00029382:[email protected]
agora o que isso está fazendo é procurar apenas a terceira coluna pelas strings de find.txt, mas eu preciso pesquisar o arquivo inteiro / todas as colunas?
como alguns arquivos podem ter 5 colunas ou 9 colunas, por exemplo,
0.0.0.0:002921931:1111111:[email protected]
123.0.0.1:00029382:1111111:11111:[email protected]
Eu tentei mudar ($ 3 em um) para gostar ($ 0- $ 9 em um), mas parece que não funciona?
Por que campos de pesquisa um por um? Por que não pesquisar linhas inteiras de cada vez?
grep -f find.txt path_to_100_files/*
Se o email for o último campo nos 100 arquivos, use:
awk -F: 'NR==FNR{a[$1];next} ($NF in a)' find.txt path_to_100_files/*
Se você precisar examinar cada campo, precisará de um loop:
awk -F: 'NR==FNR{a[$1];next} {for (i=1;i<=NF;i++) {if ($i in a) {print;break}}} find.txt path_to_100_files/*
Mas a chamada mais simples é usando o grep:
grep -oFf find.txt path_to_100_files/*
Primeiro, encontre a coluna máxima exsists nos arquivos usando o comando abaixo e tire o valor máximo dela
k='awk -F ":" '{print NF}' path_to_100_files/* | sort -nr | head -1'
Usado para loop para que seja verificado em cada coluna
for ((i=0;i<=$k;i++)); do awk -v i="$i" -F ":" 'NR==FNR {a[$1];next}($i in a) {print }’ find.txt path_to_100_files/* ; done