GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo comparar dos archivos y luego agregar una línea que no coincida parcialmente?

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 asociativa seen como claves, y vaya a next 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 matriz missing .
  • En el END , imprimimos las líneas que faltan.

Linux
  1. Cómo comprimir archivos y directorios en Linux (con ejemplos)

  2. Cómo agregar números de línea a archivos de texto en Linux

  3. Cómo unir dos archivos de texto en Linux

  4. ¿Cómo agregar varias líneas a un archivo?

  5. ¿Cómo copiar archivos en Linux y Unix? Ejemplos de comandos de 10 cp

Cómo eliminar archivos y directorios usando la línea de comandos de Linux

Cómo comparar y fusionar archivos de texto en Linux

Cómo comparar y fusionar archivos de texto en Linux (parte 2)

Cómo usar el comando cp para copiar archivos y directorios

Cómo comparar dos archivos en la terminal de Linux

Uso del comando Diff para comparar dos archivos en la terminal de Linux