私は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