Asignar nombres almacenados en un archivo a números almacenados en un segundo archivo

Asignar nombres almacenados en un archivo a números almacenados en un segundo archivo

Tengo dos archivos:

>head(fileA)
   2    1   544.8  1279.2   1.0603  3.2460  0.0542 
   3    1   546.2  1277.8   1.0463  3.2460  0.0553 
   3    2   543.9  1280.1   0.1652  3.2460  0.0177 
   4    1   543.7  1280.3   1.0819  3.2460  0.0527 
>head(fileB)
1 Coly
2 Mony
3 Fong
4 Wow
5 Poly

Me gustaría asignar los nombres en el archivo B al número en el archivo A, para obtener el siguiente resultado

   2 Mony   1 Coly   544.8  1279.2   1.0603  3.2460  0.0542 
   3 Fong   1 Coly  546.2  1277.8   1.0463  3.2460  0.0553 
   3 Fong   2 Mony  543.9  1280.1   0.1652  3.2460  0.0177 
   4 Wow    1 Coly   543.7  1280.3   1.0819  3.2460  0.0527 

Para ser honesto, no pude probar nada, simplemente pasé mucho tiempo buscando cómo hacer esto. Lo único en lo que pensé fue en asignar los números en el archivo A a las variables y luego, cada vez que se encuentren estas variables, agregarle el contenido del archivo B. Lamentablemente, no sé cómo hacer esto.

¿Alguna sugerencia, enlace, directiva? Gracias

Respuesta1

Puedes usar read de bash, grep y tr:

cat fileA | while read i j k ; do
  grep "^$i\W" fileB | tr '\n' ' '
  grep "^$j\W" fileB | tr '\n' ' ' 
  echo $k 
done

Respuesta2

Perl al rescate!

#! /usr/bin/perl
use warnings;
use strict;

open my $B, '<', 'B' or die $!;
my %name_of;
while (<$B>) {
    my ($num, $name) = split;
    $name_of{$num} = $name;
}

open my $A, '<', 'A' or die $!;
while (<$A>) {
    my @F = split;
    splice @F, 2, 0, $name_of{ $F[1] };
    splice @F, 1, 0, $name_of{ $F[0] };
    print "@F\n";
}

El segundo párrafo lee el archivo B en una tabla hash, asignando números a nombres. El tercer párrafo lee el archivo A, divide cada línea en una matriz, inserta los nombres recuperados de la tabla hash de acuerdo con las dos primeras columnas en la matriz y lo imprime.

información relacionada