我有两个文件,第一个文件包含:
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列的输出中。
答案 0 :(得分: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
答案 1 :(得分: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