한 파일에 저장된 이름을 두 번째 파일에 저장된 번호에 할당

한 파일에 저장된 이름을 두 번째 파일에 저장된 번호에 할당

두 개의 파일이 있습니다.

>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

다음 출력을 얻기 위해 fileB의 이름을 fileA의 숫자에 할당하고 싶습니다.

   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의 내용을 여기에 추가하는 것입니다. 안타깝게도 어떻게 해야 할지 모르겠습니다.

제안, 링크, 지침이 있나요? 감사해요

답변1

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

답변2

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 파일을 읽고 각 행을 배열로 분할한 후 처음 두 열을 기반으로 해시 테이블에서 검색된 이름을 배열에 삽입하고 인쇄합니다.

관련 정보