Как вы зациклите и сопоставите столбцы 1 и 2 файла file1 с ячейкой в ​​столбце file1, чтобы заменить их соседней ячейкой в ​​столбце 2 файла 2?

Я использую String-DB взаимодействия для проекта, но я обнаружил, что полный список взаимодействий использует их идентификаторы белка ансамбля. Я хотел бы заменить эти имена идентификаторов ансамблевых белков их генными символами, одобренными HGNC. Используя BioMart, я скачал таблицу с идентификаторами белков ансамбля и соответствующими им названиями генов. Поэтому мне нужно сопоставить все идентификаторы ансамбля, найденные в строковом файле (у первого и второго столбца есть идентификаторы ансамбля), с их идентификатором ансамбля в моем файле биомарта, а затем заменить каждый идентификатор на свой символ гена, найденный также в файле биомарта. У меня есть дополнительное осложнение, что у меня есть "9606." перед каждым идентификатором ансамбля в строковом файле, а не в файле BioMart. Это число означает, что это человеческий ансамбль ID, и он все еще должен быть там в новом файле строки tbl.

Примечание: эти файлы большие!

Пример строкового файла (первые 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, но ничего не работает. Я все еще новичок в биоинформатике. Если кто-то и хочет помочь этому бедняге, я был бы очень признателен.

1 ответ

Похоже, все, что вам нужно (при условии, что все значения из String присутствуют в BioMart, как в вашем примере):

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
Другие вопросы по тегам