0

2 つのファイルがあり、最初のファイルには以下が含まれます。

  rs1210110 1:14096821  C   ENSG00000116731 ENST00000505823 Transcript 
  rs1210110 1:14096821  C   ENSG00000116731 ENST00000491815 Transcript  
  rs1210110 1:14096821  C   ENSG00000116731 ENST00000343137 Transcript
  rs2746462 2:17380497  T   ENSG00000117118 ENST00000485515 Transcript
  rs2746462 2:17380497  T   ENSG00000117118 ENST00000375499 Transcript
  rs3219489 2:45797505  G   ENSG00000132781 ENST00000525160 Transcript

2 番目のファイルには以下が含まれます。

chr1    14096821    rs1210110   T   C   100.00  PASS    DP=89
chr2    17380497    rs2746462   G   T   100.00  PASS    DP=158

1 つのファイルに結合したいのですが、

    chr1 14096821 rs1210110 T C 100.00 PASS DP=89  ENSG00000116731  ENST00000505823 Transcript  
    chr1 14096821 rs1210110 T C 100.00 PASS DP=89  ENSG00000116731  ENST00000491815 Transcript
    chr1 14096821 rs1210110 T C 100.00 PASS DP=89  ENSG00000116731  ENST00000343137 Transcript
    chr2 17380497 rs2746462 G T 100.00 PASS DP=158 ENSG00000117118  ENST00000485515 Transcript
    chr2 17380497 rs2746462 G T 100.00 PASS DP=158 ENSG00000117118  ENST00000375499 Transcript
    chr2 17380497 rs2746462 G G 100.00 PASS DP=158 ENSG00000132781  ENST00000525160 Transcript

それよりも、2 番目のファイルには 3 番目の列に rs コードが含まれています。これは最初のファイルの最初の列と同じです。ただし、2 番目のファイルの 1 行には、最初のファイルの行がさらに含まれる可能性がありますが、rs コードは同じです。最初のファイルの 3 列目は、5 列目の出力になります。

4

2 に答える 2

1

すべて完了awk

cat f1
rs1210110 1:14096821  C   ENSG00000116731 ENST00000505823 Transcript
rs1210110 1:14096821  C   ENSG00000116731 ENST00000491815 Transcript
rs1210110 1:14096821  C   ENSG00000116731 ENST00000343137 Transcript
rs2746462 2:17380497  T   ENSG00000117118 ENST00000485515 Transcript
rs2746462 2:17380497  T   ENSG00000117118 ENST00000375499 Transcript
rs3219489 2:45797505  G   ENSG00000132781 ENST00000525160 Transcript


cat f2
chr1    14096821    rs1210110   T   C   100.00  PASS    DP=89
chr2    17380497    rs2746462   G   T   100.00  PASS    DP=158


awk 'FNR==NR {a[$2]=$0;next} {split($2,b,":");print a[b[2]],$4,$5,$6 }' OFS="\t" f2 f1
chr1    14096821    rs1210110   T   C   100.00  PASS    DP=89   ENSG00000116731 ENST00000505823 Transcript
chr1    14096821    rs1210110   T   C   100.00  PASS    DP=89   ENSG00000116731 ENST00000491815 Transcript
chr1    14096821    rs1210110   T   C   100.00  PASS    DP=89   ENSG00000116731 ENST00000343137 Transcript
chr2    17380497    rs2746462   G   T   100.00  PASS    DP=158  ENSG00000117118 ENST00000485515 Transcript
chr2    17380497    rs2746462   G   T   100.00  PASS    DP=158  ENSG00000117118 ENST00000375499 Transcript
        ENSG00000132781 ENST00000525160 Transcript

最後の行は一致しなかったため、先頭に情報を付けずに出力されます。これは、必要に応じて削除できます。


とのいくつかの異なるアプローチawk

awk -F"[ \t:]*" 'FNR==NR {a[$2]=$0;next} {print a[$3],$5,$6,$7 }' OFS="\t" f2 f1
于 2013-10-31T11:29:10.040 に答える