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.txt
y 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.txt
y creará una matriz ( a
) con ellas. Luego revisará file1.txt
y verificará si el valor de la columna 2 existe en la a
matriz. 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