Reemplace los valores comunes en dos archivos según la primera columna

Reemplace los valores comunes en dos archivos según la primera columna

¿Cómo reemplazo valores comunes en dos archivos según la primera columna?

Tengo el archivo 1 (1.txt):

CH063_01084
CH063_01083
CH063_13925
CH063_14473

y archivo 2 (2.txt):

CH063_01083         FGSG_16349  4
CH063_14473         FGSG_16350  5

el archivo de salida debe ser:

CH063_01084
CH063_01083          FGSG_16349 4
CH063_13925
CH063_14473          FGSG_16350 5

Respuesta1

Puedes usarjoinpara esto:

join -a 1 file1 file2

joincombina archivos basados ​​en un campo común. Por defecto, ese es el primer campo de ambos archivos. -a 1significa incluir líneas del primer archivo cuando no había ningún par. Para seleccionar campos distintos al primero, use -1 N -2 Mpara seleccionar el campo N de file1y M de file2.

Respuesta2

Puedes usar join:

$ join -a 1 file1.txt file2.txt 
A
B asas 4
C
D addd 5

Si su archivo no está ordenado:

join -a 1 <(sort 1.txt) <(sort 2.txt)

Pero te hace perder el formato. Puedes usar perl:

$ perl -anle ' $h{$F[0]} = $_;
    END { print for sort values %h }
' file1.txt file2.txt

información relacionada