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 progtwig de combinación de GNU. ¿Existe tal cosa? Si no, 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 

¿No debería el archivo2 contener LUA al final?

Si es así, aún puede usar join :

 join -t'|' -12 <(sort -t'|' -k2 file1) file2 

Usted puede modificar este script:

 cat file2 | while read line; do grep $line file1 # or whatever you want to do with the $line variable done 

while loop lee archivo2 línea por línea y le da esa línea al comando grep que greps esa línea en file1. Hay algunos resultados extra que quizás se eliminen con las opciones de grep.

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

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

¿Como funciona esto?

  • -F'|' – establece el separador de campo
  • 'NR==FNR{check[$0];next} – si el número total de registro 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 construcción NR==FNR .

Parece que solo necesitas

 grep -F -f file2 file1 

Puede usar el comando pegar para combinar el archivo:

 paste [option] source files [>destination file] 

para su ejemplo, sería

 paste file1.txt file2.txt >result.txt