Bash Grep|awk e imprime o resultado de arquivos diferentes

Bash Grep|awk e imprime o resultado de arquivos diferentes

Eu tenho 2 arquivos que contêm endereços IP

1º Arquivo:

192.168.1.1:4.4.4.4
192.168.1.2:4.4.2.2
192.168.1.1:8.8.8.8
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

2º arquivo:

4.4.2.2
4.4.8.8

Agora eu quero um script que pegue cada valor do arquivo 2 e verifique se esses valores estão presentes nos arquivos primeiro. Se o valor estiver presente, ele deverá imprimir a linha inteira do primeiro arquivo.

Por exemplo, resultado desejado do exemplo acima:

192.168.1.2:4.4.2.2
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

Responder1

grep -F -f file2.txt file1.txt

Isso lerá as linhas file2.txte as usará como padrões para pesquisar em file1.txt.


Se você quiser verificar apenas correspondências na segunda coluna, você pode usar este comando awk:

awk -F: 'NR==FNR{a[$0];next}$2 in a' file2.txt file1.txt

Isso lerá cada string file2.txte criará um array ( a) com elas. Em seguida, ele irá file1.txtverificar se o valor da coluna 2 existe no aarray. Se isso acontecer, toda a linha será impressa.

Responder2

Você pode percorrer o segundo arquivo e grep do primeiro arquivo.

for pattern in `cat file2.txt` ; do grep $pattern file1.txt ; done

Se você quiser combinar apenas o final depois dos dois pontos.

for pattern in `cat file2.txt` ; do grep :$pattern$ file1.txt ; done

informação relacionada