2つのファイルがあります。ファイル1には以下が含まれています
470.2843 organism AR_0036 123 Intermediate
470.2845 organism AR_0033 456 Susceptible
903909.3 organism Naval-83 789 Resistant
file2 には以下が含まれます。
123
456
abc
def
789
私の出力は次のようになります。 file2 の値が file1 と一致しない場合、Perl は出力ファイル内の対応する行を空白のままにし、一致する場合は出力ファイル内の一致する行に対応するデータを出力します。
#!/usr/bin/perl
my $file1 = '/Users/apple/Desktop/ncbi_ab_data/new_file1';
my $file2 = '/Users/apple/Desktop/ncbi_ab_data/new_file2';
open my $fh1, '<' , $file1;
while (<$fh1>){
chomp;
my @file1 = split('\t', $_ );
#print "$file1[0]\t";
#print "$file1[1]\t";
#print "$file1[2]\t";
#print "$file1[3]\t\n";
open my $fh2, '<' , $file2;
while (<$fh2>){
chomp;
my @file2 = split('\t', $_ );
#if ($file2[0] == $file1[2])
#print "$file2[0]\n";
if ($file2[0] = $file1[2]){
print "$file2[0]";
print "\t$file1[3]\n";
}
#print "$file1[0]\n";
#print "$file2[1]\n";
#print "$file2[2]\n";
#print "$file2[3]\n";
#print "$file2[4]\n";
}
}
このコードを書いていますが、うまくいきません。
答え1
マッチングは、結合(file1のフィールド4とfile2のフィールド1を印刷して一致させるために使用されます)とソート(それぞれfile1とfile2のフィールド4とフィールド1に順序付けられた入力データを生成するために使用されます)を使用して実行されます。できます。
join -o 2.1,1.3 -1 4 -2 1 <(sort -k 4 file1) <(sort -k 1 file2)
サンプルデータを使用して生成されます。
123 AR_0036
456 AR_0033
789 Naval-83
あなたのスクリプトに関して、インデックス2
if ($file2[0] = $file1[2]){
間違った。