VLOOKUP () с повторными значениями - PullRequest
0 голосов
/ 04 апреля 2019

Я имею дело с некоторой типичной проблемой VLOOKUP, но довольно трудной из-за повторяющихся строк ...

У меня есть два файла, таких как:

Файл 1

transcript1     miR1
transcript1     miR2
transcript2     miR5
transcript2     miR4 
transcript2     miR1
transcript2     miR2
transcript3     miR5
transcript4     miR2

Файл 2

transcript1     gene1
transcript2     gene1
transcript3     gene2
transcript4     gene2

Я хочу присвоить имена генов транскриптам в файле 1, в соответствии с файлом 2, чтобы получить следующее:

transcript1     miR1    gene1
transcript1     miR2    gene1
transcript2     miR5    gene1
transcript2     miR4    gene1
transcript2     miR1    gene1
transcript2     miR2    gene1
transcript3     miR5    gene2
transcript4     miR2    gene2

Я обычно выполняю эту задачус помощью функции VLOOKUP () из OpenOffice или Excel вставьте файл 2 в электронную таблицу file1.

Но эта функция, похоже, не работает с повторяющимися строками в матрице поиска (столбец 1 файла1) ...

Кто-нибудь знает способ сделать это?Кажется простым, но не смог понять ...

Есть ли способ сделать это на AWK, BASH, Excel / OpenOffice?

Спасибо.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Вы можете использовать join :

join file1 file2

Вывод (на основе вашего образца ввода):

transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2

Важно: оба файла должны быть отсортированы для join на работу.Несортированные файлы могут быть отсортированы на лету:

join <(sort file1) <(sort file2)

Если ваша оболочка не поддерживает подстановку команд, вы можете использовать временные промежуточные файлы:

sort file1 > sorted1
sort file2 > sorted2
join sorted1 sorted2
0 голосов
/ 04 апреля 2019

Это будет работать независимо от того, отсортированы ли ваши входные файлы:

$ awk 'NR==FNR{a[$1]=$2;next} {print $0, a[$1]}' file2 file1
transcript1     miR1 gene1
transcript1     miR2 gene1
transcript2     miR5 gene1
transcript2     miR4 gene1
transcript2     miR1 gene1
transcript2     miR2 gene1
transcript3     miR5 gene2
transcript4     miR2 gene2
...