我正在为项目使用String-db交互,但我发现完整的交互列表使用了他们的ensembl蛋白ID。我想用他们的HGNC批准的基因符号替换那些ensembl蛋白质ID名称。使用BioMart,我下载了一个包含ensembl蛋白质ID及其各自基因名称的表格。所以我需要匹配字符串文件中的所有ensembl ID(第一列和第二列都有ensembl ID)和我们的biomart文件中的ensembl ID,然后在biomart文件中替换每个ID及其找到的基因符号。我有一个额外的复杂功能,我有一个" 9606。"在字符串文件中的每个ensembl ID之前,而不是在BioMart文件中。这个数字表示它是一个人类的ensembl ID,仍然需要在新的tbl String文件中。
注意:这些文件很大!
字符串文件示例(前10行):
9606.ENSP00000000233 9606.ENSP00000263025 ptmod f f 150
9606.ENSP00000000233 9606.ENSP00000265709 reaction f f 908
9606.ENSP00000000233 9606.ENSP00000265709 catalysis t t 908
9606.ENSP00000000233 9606.ENSP00000263025 inhibition inhibition t t 154
9606.ENSP00000000233 9606.ENSP00000265709 binding f t 908
9606.ENSP00000000233 9606.ENSP00000265709 catalysis t f 908
9606.ENSP00000000233 9606.ENSP00000263025 inhibition inhibition f t 150
9606.ENSP00000000233 9606.ENSP00000263025 inhibition inhibition f f 150
9606.ENSP00000000233 9606.ENSP00000265709 binding f f 908
9606.ENSP00000000233 9606.ENSP00000263025 catalysis t t 156
BioMart文件(用于处理上述文件的示例):
Ensembl_Protein_ID Gene_Symbol
ENSP00000265709 ANK1
ENSP00000000233 ARF5
ENSP00000263025 MAPK3
ENSP00000388118 NCSTN
输出文件:
9606.ARF5 9606.MAPK3 ptmod f f 150
9606.ARF5 9606.ANK1 reaction f f 908
9606.ARF5 9606.ANK1 catalysis t t 908
9606.ARF5 9606.MAPK3 inhibition inhibition t t 154
9606.ARF5 9606.ANK1 binding f t 908
9606.ARF5 9606.ANK1 catalysis t f 908
9606.ARF5 9606.MAPK3 inhibition inhibition f t 150
9606.ARF5 9606.MAPK3 inhibition inhibition f f 150
9606.ARF5 9606.ANK1 binding f f 908
9606.ARF5 9606.MAPK3 catalysis t t 156
我不知道该怎么做。我尝试过使用awk和perl,但没有任何效果。我仍然是生物信息学方面的菜鸟。如果有人愿意帮助这个可怜的家伙,我会非常感激。
答案 0 :(得分:0)
Sounds like all you need (assuming all values from String are present in BioMart like in your example) is:
awk '
NR==FNR{ map[$1]=$2; next }
{
for (i=1; i<=2; i++) {
split($i,f,/[.]/)
$i = f[1] "." map[f[2]]
}
print
}
' BioMartFile StringFile