Zuweisen von in einer Datei gespeicherten Namen zu in einer zweiten Datei gespeicherten Nummern

Zuweisen von in einer Datei gespeicherten Namen zu in einer zweiten Datei gespeicherten Nummern

Ich habe zwei Dateien:

>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

Ich möchte die Namen in DateiB den Nummern in DateiA zuordnen, um folgende Ausgabe zu erhalten

   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 

Ehrlich gesagt konnte ich nichts ausprobieren, ich habe nur viel Zeit damit verbracht, nachzuschauen, wie das geht. Das Einzige, was mir einfiel, war, die Zahlen in Datei A Variablen zuzuweisen und dann jedes Mal, wenn diese Variablen gefunden werden, den Inhalt von Datei B daran anzuhängen. Leider weiß ich nicht, wie das geht.

Irgendwelche Vorschläge, Links, Anweisungen? Danke

Antwort1

Sie können die Befehle read, grep und tr von Bash verwenden:

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

Antwort2

Perl zur Rettung!

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

Der zweite Absatz liest die B-Datei in eine Hash-Tabelle und ordnet Zahlen Namen zu. Der dritte Absatz liest die A-Datei, teilt jede Zeile in ein Array auf, fügt die aus der Hash-Tabelle abgerufenen Namen gemäß den ersten beiden Spalten in das Array ein und druckt es aus.

verwandte Informationen