2つのファイルのうち、列1に一致するものがある場合は、2つのファイル間の値をfile2(2番目の列)の値に置き換えます。

2つのファイルのうち、列1に一致するものがある場合は、2つのファイル間の値をfile2(2番目の列)の値に置き換えます。

2つのcsvファイルがあります(サイズが大きく、行が不足しています)。ここでは、同じ行数のサンプルファイルのみを提供します。

ファイル1:

NC_008689 2 NA NA NA NA 
NC_002670 3 NA NA NA 186 
NC_002671 9 NA NA NA 107 
NC_009382 25 9 15 NA 100 
NC_003977 45 92 535 NA 492685

ファイル2:

NC_008689   Siphoviridae,Biseptimavirus,Staphylococcus virus 108PVL
NC_002670   Siphoviridae,,Lactococcus phage bIL311
NC_002671   Siphoviridae,,Lactococcus phage bIL312
NC_009382   Myoviridae,Peduovirus,Ralstonia virus RSA1
NC_003977   Hepadnaviridae,Orthohepadnavirus,Hepatitis B virus

希望の出力:

Siphoviridae,Biseptimavirus,Staphylococcus virus 108PVL 2   NA  NA  NA  NA
Siphoviridae,,Lactococcus phage bIL311  3   NA  NA  NA  186
Siphoviridae,,Lactococcus phage bIL312  9   NA  NA  NA  107
Myoviridae,Peduovirus,Ralstonia virus RSA1  25  9   15  NA  100
Hepadnaviridae,Orthohepadnavirus,Hepatitis B virus2 45  92  535 NA  492685

私は試した:

awk 'FNR==NR { F2[$1]=$2 ; next } $1 in F2 {$1 = F2[$1] ; print } ' File2 File1

しかし、その結果、私は次のような結果を得ました。

Siphoviridae,Biseptimavirus,Staphylococcus 2 NA NA NA NA
Siphoviridae,,Lactococcus 3 NA NA NA 186
Siphoviridae,,Lactococcus 9 NA NA NA 107
Myoviridae,Peduovirus,Ralstonia 25 9 15 NA 100
Hepadnaviridae,Orthohepadnavirus,Hepatitis 45 92 535 NA 492685

スペースを含むFile2の名前に問題があります。

ベストアンサー1

join最初のフィールドを使用できますcut

join <(sort File2) <(sort File1) | cut -d' ' -f2-

または、印刷したいすべてのフィールドをjoin追加してください。-o

join -o 1.2,1.3,1.4,2.2,2.3,2.4,2.5,2.6 <(sort File2) <(sort File1)

おすすめ記事