awk pesquisando strings do arquivo

0

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 user269118 06.01.2018 / 01:30

3 respostas

1

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/*
    
por 06.01.2018 / 01:49
0

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/*
    
por 06.01.2018 / 03:40
0

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
    
por 06.01.2018 / 19:26

Tags