Estoy tratando de comparar dos archivos (Extensions.txt
y Temp.txt
). Si hay una línea que no coincide parcialmente con Extensions.txt
en Temp.txt
Me gustaría agregar la línea que falta a Temp.txt
.
Extensions.txt
(Muy básico, una columna):
111
1234
4321
Temp.txt
:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
Básicamente, lo que quiero hacer es encontrar una coincidencia basada en todo antes del /
en la primera columna y si no hay ninguna coincidencia, me gustaría imprimir la línea que no coincide en la parte inferior del archivo para que termine así:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
Hasta ahora he intentado grep -v
y no produce los resultados que quiero, también probé con awk
y parece que ese es el camino a seguir, sin embargo, no tengo una comprensión completa de cómo awk
funciona para producir los resultados apropiados.
Respuesta aceptada:
Puede analizar los archivos con awk
awk -F '/' '
FNR == NR {seen[$1] = $0; next}
{if ($1 in seen) print seen[$1]; else missing[$1]}
END {for (x in missing) print x}
' Temp.txt Extensions.txt
Salida:
1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
- Establezca el separador de campo en barra oblicua,
-F '/'
- La acción después de
FNR == NR
se ejecuta para las líneas del primer archivo de entrada. Almacenamos las líneas en la matriz asociativaseen
como claves, y vaya anext
línea. - La segunda acción se ejecuta para el segundo archivo, cuando
FNR != NR
. Si el primer campo coincide, imprimimos la línea almacenada,else
guardamos el campo en otra matrizmissing
. - En el
END
, imprimimos las líneas que faltan.