Unión interna en dos archivos de texto

Resuelto Dave Snigier asked hace 12 años • 5 respuestas

Buscando realizar una unión interna en dos archivos de texto diferentes. Básicamente estoy buscando el equivalente de unión interna del programa de unión GNU. ¿Existe tal cosa? De lo contrario, una solución awko sedsería de gran ayuda, pero mi primera opción sería un comando de Linux.

Aquí hay un ejemplo de lo que estoy buscando hacer.

archivo 1:

0|Alien Registration Card LUA|Checklist Update
1|Alien Registration Card LUA|Document App Plan
2|Alien Registration Card LUA|SA Application Nbr
3|Alien Registration Card LUA|tmp_preapp-DOB
0|App - CSCE Certificate LUA|Admit Type
1|App - CSCE Certificate LUA|Alias 1
2|App - CSCE Certificate LUA|Alias 2
3|App - CSCE Certificate LUA|Alias 3
4|App - CSCE Certificate LUA|Alias 4

archivo 2:

Alien Registration Card LUA

Resultados:

0|Alien Registration Card LUA|Checklist Update
1|Alien Registration Card LUA|Document App Plan
2|Alien Registration Card LUA|SA Application Nbr
3|Alien Registration Card LUA|tmp_preapp-DOB
Dave Snigier avatar Nov 07 '12 22:11 Dave Snigier
Aceptado

Aquí hay una opción de awk, para que pueda evitar la dependencia de bash (para portabilidad):

$ awk -F'|' 'NR==FNR{check[$0];next} $2 in check' file2 file1

¿Cómo funciona esto?

  • -F'|'-- establece el separador de campo
  • 'NR==FNR{check[$0];next}-- si el número total de registros coincide con el número de registro del archivo (es decir, estamos leyendo el primer archivo proporcionado), completamos una matriz y continuamos.
  • $2 in check-- Si se mencionó el segundo campo en la matriz que creamos, imprima la línea (que es la acción predeterminada si no se proporcionan acciones).
  • file2 file1-- Los archivos. El orden es importante debido a la NR==FNRconstrucción.
ghoti avatar Nov 07 '2012 16:11 ghoti

¿ No debería contener el archivo2 LUAal final?

En caso afirmativo, aún puedes usar join:

join -t'|' -12 <(sort -t'|' -k2 file1) file2
choroba avatar Nov 07 '2012 15:11 choroba

Parece que solo necesitas

grep -F -f file2 file1
glenn jackman avatar Nov 07 '2012 21:11 glenn jackman