Unión interna en dos archivos de texto
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 awk
o sed
serí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
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 laNR==FNR
construcción.
¿ No debería contener el archivo2 LUA
al final?
En caso afirmativo, aún puedes usar join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
Parece que solo necesitas
grep -F -f file2 file1