2 つのファイルがあります:
>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
正直に言うと、私は何も試すことができませんでした。ただ、これを行う方法を調べるのに多くの時間を費やしました。私が考えた唯一のことは、ファイル A の数字を変数に割り当て、この変数が見つかるたびにファイル B のコンテンツを追加することでした。残念ながら、これを行う方法がわかりません。
何か提案、リンク、指示はありますか? ありがとうございます
答え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";
}
2 番目の段落では、B ファイルをハッシュ テーブルに読み込み、番号を名前にマッピングします。3 番目の段落では、A ファイルを読み込み、各行を配列に分割し、最初の 2 つの列に従ってハッシュ テーブルから取得した名前を配列に挿入し、それを出力します。