0

我有两个文件,第一个文件包含:

  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

第二个文件包含:

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

我想把它加入一个文件,在哪里

    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

然后,第二个文件在第三列包含 rs 代码,这与第一列的第一个文件相同。但是第二个文件中的一行可能有来自第一个文件的更多行,但具有相同的 rs 代码。第一个文件的第三列将在第 5 列的输出中。

4

2 回答 2

1

用于join加入和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
$ join -1 1 -2 3 f1 f2 | awk '{print $7, $8, $1, $9, $10, $11, $12, $13, $4, $5, $6}'
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
于 2013-10-31T10:34:39.697 回答
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 回答