Juntar + ordenar
Se você está tentando encontrar IPs que estão presentes em ambos, você pode usar o comando join , mas precisará usar sort para pré-ordenar os arquivos antes de associá-los.
$ join -o 2.2 <(sort file1) <(sort file2)
Exemplo
$ join -o 2.2 <(sort file1) <(sort file2)
1.765
0.326
4.754
3.673
6.334
Outro exemplo
arquivo 1a:
$ cat file1a
34.123.21.32
45.231.43.21
21.34.67.98
1.2.3.4
5.6.7.8
9.10.11.12
arquivo 2a:
$ cat file2a
34.123.21.32 0.326 - [30/Oct/2013:06:00:06 +0200]
45.231.43.21 6.334 - [30/Oct/2013:06:00:06 +0200]
45.231.43.21 3.673 - [30/Oct/2013:06:00:06 +0200]
34.123.21.32 4.754 - [30/Oct/2013:06:00:06 +0200]
21.34.67.98 1.765 - [30/Oct/2013:06:00:06 +0200]
1.2.3.4 1.234 - [30/Oct/2013:06:00:06 +0200]
4.3.2.1 4.321 - [30/Oct/2013:06:00:06 +0200]
Executando o comando join :
$ join -o 2.2 <(sort file1) <(sort file2)
1.234
1.765
0.326
4.754
3.673
6.334
NOTA: A ordem original de file2 é perdida com este método, devido ao fato de que a classificamos primeiro. No entanto, esse método só precisa varrer file2 uma vez, como resultado.
grep
Você pode usar grep para pesquisar correspondências em file2 usando linhas que estão em file1 , mas esse método não é tão eficiente quanto o primeiro método que mostrei. Está varrendo file2 procurando por cada linha em file1 .
$ grep -f file1 file2 | awk '{print $2}'
Exemplo
$ grep -f file1 file2 | awk '{print $2}'
0.326
6.334
3.673
4.754
1.765
1.234
Melhorando o desempenho do grep
Você pode acelerar o desempenho de grep usando este formulário:
$ LC_ALL=C grep -f file1 file2 | awk '{print $2}'
Você também pode informar a grep que as picadas em file1 têm comprimento fixo ( -F ), o que também ajudará a obter um melhor desempenho.
$ LC_ALL=C grep -Ff file1 file2 | awk '{print $2}'
Geralmente, no software, você tenta evitar essa abordagem, já que é basicamente um loop dentro de um tipo de solução de loop. Mas há momentos em que é o melhor que pode ser alcançado usando um computador + software.