3

2 つのファイルの 2 番目の列を比較したいと考えています。一致する場合は、2 番目のファイルの 3 列目の対応する値を最初のファイルに出力します。一致するものが見つからない場合は、「NA」と記入してください

File 1

1      rs1    AA    10
1      rs2    DD    20
1      rs3    EE    30
1      rs4    RR    40


File 2

1      rs1    Pascal
1      rs4    Albinoni


Desired output

1      rs1    AA    10    Pascal
1      rs2    DD    20    NA
1      rs3    EE    30    NA
1      rs4    RR    40    Albinoni

私はこのコードを使用しましたが、一致するものしか出力しません:

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

ありがとうございました

4

3 に答える 3

3

あなたが望むものとはまったく異なりますが、小さなツールを使用することは常に素晴らしいことです. 使用できますjoin

$ join -1 2 -2 2 -a1 file1 file2
rs1 1 AA 10 1 Pascal
rs2 1 DD 20
rs3 1 EE 30
rs4 1 RR 40 1 Albinoni

説明:

  • -1 2: の 2 番目のフィールドをfile1結合キーとして使用します
  • -2 2: の 2 番目のフィールドをfile2結合キーとして使用します
  • -a1: 左外部結合オンfile1
于 2013-09-03T12:53:59.860 に答える
2
awk 'NR==FNR{a[$2]=$3;next;}{print $0 "    " ($2 in a ? a[$2] : "NA")}' file2 file1

出力:

1      rs1    AA    10    Pascal
1      rs2    DD    20    NA
1      rs3    EE    30    NA
1      rs4    RR    40    Albinoni
于 2013-09-03T12:55:37.103 に答える