Назначить имена, хранящиеся в файле к числам, хранящимся во втором файле

I есть два файла:

>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

Я хотел бы присвоить имена в файлеB номеру в файлеA, чтобы получить следующий результат

   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 

Честно говоря, я не смог ничего попробовать, я просто потратил много времени на поиск как это сделать. Единственное, о чем я подумал, - это присвоить числа в fileA переменным, а затем каждый раз, когда эти переменные будут найдены, добавлять к ним содержимое fileB. К сожалению, я не знаю, как это сделать.

Есть предложения, ссылки, директивы? Спасибо

0
15.02.2016, 00:14
2 ответа

Вы можете использовать bash read, grep и tr:

cat fileA | while read i j k ; do
  grep "^$i\W" fileB | tr '\n' ' '
  grep "^$j\W" fileB | tr '\n' ' ' 
  echo $k 
done
1
28.01.2020, 02:49

Perl на помощь!

#! /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";
}

Второй параграф считывает файл B в хэш-таблицу, сопоставляя числа с именами. Третий параграф читает файл A, разбивает каждую строку на массив, вставляет в массив имена, извлеченные из хэш-таблицы по первым двум столбцам, и печатает его.

0
28.01.2020, 02:49

Теги

Похожие вопросы