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