一致する最初の列と行のマージ

一致する最初の列と行のマージ

私は2つのファイルの最初の列が同じときにawkを使用して2つのファイルをマージしようとしました。私のサンプルファイルは次のとおりです。

ファイルA.txt

A2M    1
A4GALT    11
AAAS    35
AAGAB    7

ファイルB.txt

A4GALT    2
AAAS    17
AAGAB    7

ご覧のとおり、2番目のファイルがありませんA2M。項目が欠落している場合は、0最終出力から該当する項目を読み取る必要があります。それだけです:

A2M    1    0
A4GALT    11    2
AAAS    35    17
AAGAB    7    7

私の研究室の同僚は私にうまく機能しないawkので提案しました。joinいくつかの助けを借りて、次のコマンドを思い出しましたawk

awk -F "\t" 'FNR==NR {h[$1] = $2;next} BEGIN{ OFS = "\t"} {print $0,$2?h[$1]:"0"}' FileB.txt FileA.txt

0しかし、一致するものがなければ、私の出力は何も印刷せず、FileB.txt代わりに何も印刷しません。何が問題なのかご存知ですか?

答え1

2つのファイルをまとめると作業ですjoin:

join -1 1 -2 1 -a 1 -o 1.1 -o 1.2 -o 2.2 -e "0" FileA.txt FileB.txt

どこ:

  • -1 1 -2 1結合するフィールド定義(両方のファイルで最初)
  • -a 1ペアリングできないライン強制join印刷FileA.txt
  • -o 1.1 1.2 2.2出力形式です
  • -e "0"空のフィールドに保存する値を定義します。

出力:

A2M 1 0
A4GALT 11 2
AAAS 35 17
AAGAB 7 7

関連情報