join
Une líneas de dos archivos de texto por un campo común, por defecto la primera palabra (campo) separada por un espacio (delimitador). Los espacios iniciales se ignoran. Ejemplo:
join -n file1.txt file2.txt
Uno de eso archivos puede ser - (standar input). Las opciones son:
-a 1 imprime también lineas no emparejadas de file1.txt -v 1 lo mismo, pero quita las emparejadas -e EMPTY cambia entradas missing por EMPTY -i mayúsculas-minúsculas -n se ordenan numéricamente -o FORMAT 0, comas, espacios (formato de salida) -t : usa : como separador (entrada y salida) -1 CAMPO une usando este campo del archivo 1 -2 CAMPO une usando este campo del archivo 2
Por ejemplo, imaginemos estos dos archivos. Uno con nombres y apellidos (por sencillez omitimos acentos y mayúsculas) y otro con una lista de deudas, solo con nombres.
file1.txt file2.txt --------------- --------------------- pepe comino pepe debe 10000 jose perez carmen debe 400 carmen matas lola debe 0 fran debe 200
Si queremos un listado de las deudas, pero con el nombre completo, podríamos hacer:
$ join file1.txt file2.txt pepe comino debe 10000
Pero esto sólo une la primera línea, ya que solo ella tiene campo coincidente
$ join file1.txt file2.txt pepe comino debe 10000 jose perez debe 10000 carmen matas debe 400
Ahora saca todos los casos coincidentes, pero no salen "lola" y "fran" ya que no tenemos sus apellidos, pero podemos sacarlos de todos modos con "-a2" o verlos sólo a ellos con "-v2" :
$ join -n -a 2 file1.txt file2.txt pepe comino debe 10000 jose perez debe 10000 carmen matas debe 400 lola debe 0 fran debe 200