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.