タブ区切りファイルの構成

タブ区切りファイルの構成

タブ区切りのファイル形式で相互リンク情報を取得するために、マップファイルの情報を比較したいと思います。

たとえば、ファイルには次のものが含まれています。

COG0001 882.DVU3168
COG0002 883.DvMF_2502
COG0001 1140.Synpcc7942_0645
COG0001 1148.SYNGTS_2220

その他のファイル

COG0001 H
COG0002 E

最終ファイルには、次の情報を含める必要があります。

COG0001 882.DVU3168 H
COG0002 883.DvMF_2502   E
COG0001 1140.Synpcc7942_0645    H
COG0001 1148.SYNGTS_2220    H

編集する

私の質問に戻り、ファイル2の情報をファイル3に印刷したいと思います。

私のコマンドは次のとおりです。

awk -F $'\t' 'FNR==NR{a[$2]++;next}a[$1]''{print $0, ..... }' file2 file1 > file3

これにより、file1から列2(ファイル2)、列1(ファイル1)の一致するコンテンツまですべてが提供されます。

ファイル2の情報を印刷するように設定するには?

答え1

awkを使用すると、次のようにできます。

$ awk 'NR==FNR{a[$1]=$2;next}{print $0, a[$1]}' file2 file1
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H

このNR==FNR{a[$1]=$2;next}ブロックは file2 に対して実行され、最初のフィールドをキーとしてマップに 2 番目のフィールドを格納します。

この{print $0, a[$1]}ブロックは file1 に対して実行され、現在の行とマップから取得された値を出力します。

データをタブで区切るには(フィールドを区別しない他のスペース)を実行しawk -F'\t' ...、出力もタブで区切るにはを使用しますawk -F'\t' -v OFS='\t' ...

答え2

出力順序が気に入らない場合は、次のようにします。

$ join <(sort file1) <(sort file2)
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E

関連情報