Bash Grep|awk e imprime el resultado de diferentes archivos

Bash Grep|awk e imprime el resultado de diferentes archivos

Tengo 2 archivos que contienen direcciones IP.

1er archivo:

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

2do archivo:

4.4.2.2
4.4.8.8

Ahora quiero un script que tome cada valor del segundo archivo y verifique si esos valores están presentes en el primer archivo. Si el valor está presente, debería imprimir la línea completa desde el archivo 1.

Por ejemplo, el resultado deseado del ejemplo anterior:

192.168.1.2:4.4.2.2
4.4.8.8:192.168.1.6
192.168.1.4:4.4.8.8

Respuesta1

grep -F -f file2.txt file1.txt

Esto leerá las líneas file2.txty las usará como patrones para buscar file1.txt.


Si solo desea verificar coincidencias en la segunda columna, puede usar este comando awk:

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

Esto leerá cada cadena file2.txty creará una matriz ( a) con ellas. Luego revisará file1.txty verificará si el valor de la columna 2 existe en la amatriz. Si es así, se imprimirá toda la línea.

Respuesta2

Puede recorrer el segundo archivo y realizar grep desde el primer archivo.

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

Si desea hacer coincidir solo el final después de los dos puntos.

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

información relacionada