タブ区切りのファイル形式で相互リンク情報を取得するために、マップファイルの情報を比較したいと思います。
たとえば、ファイルには次のものが含まれています。
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