объединить два списка с объединением на столбце - PullRequest
3 голосов
/ 16 сентября 2010

Я пытаюсь объединить два списка, объединяя их общим полем, например ENST00000371026.Я попробовал следующее, но не повезло.Как на самом деле это сделать?

cat> gar1.txt <<EOF
ENST00000371026 ENSG00000152763
ENST00000371023 ENSG00000152763
ENST00000395250 ENSG00000152763
ENST00000309502 ENSG00000163485
ENST00000377464 ENSG00000142599
ENST00000400908 ENSG00000142599
ENST00000337907 ENSG00000142599
ENST00000400907 ENSG00000142599
ENST00000401087 ENSG00000179571
EOF

cat> gar2.txt <<EOF
DDX11L1 ENST00000371026
DDX11L9 ENST00000309502
DDX11L1 ENST00000371026
OR4F5   ENST00000377464
DQ597235        n/a
DQ599768        n/a
LOC388312       ENST00000401087
LOC100132287    ENST00000425496
LOC100132287    ENST00000425496
EOF

join -t"\t" -2 2 -1 1 gar1.txt gar2.txt

Пример вывода будет:

DDX11L1 ENSG00000152763
DDX11L9 ENSG00000163485
OR4F5   ENSG00000142599
LOC388312       ENSG00000179571
LOC100132287    NONE

1 Ответ

3 голосов
/ 16 сентября 2010

Попробуйте:

join -a 2 -t $'\t' -2 2 -1 1 -o 2.1 1.2 <(sort gar1.txt) <(sort -k 2,2 gar2.txt) | sed '/\t$/ s/$/NONE/' | uniq

Используется подстановка процесса Bash (<()), но вы можете просто предварительно отсортировать файлы, если не хотите их использовать. Ваша версия join должна иметь опцию -o, или вы можете использовать awk для дальнейшей обработки вывода. Для строк «n / a» будет напечатано «NONE», но вы можете сделать это, чтобы устранить их:

<(sort -k 2,2 gar2.txt | grep -v 'n/a$')

Edit:

Это вывод, который я получаю без sed и uniq:

DDX11L9 ENSG00000163485
DDX11L1 ENSG00000152763
DDX11L1 ENSG00000152763
OR4F5   ENSG00000142599
LOC388312       ENSG00000179571
LOC100132287
LOC100132287
DQ597235
DQ599768

И вот что я получаю с ними:

DDX11L9 ENSG00000163485
DDX11L1 ENSG00000152763
OR4F5   ENSG00000142599
LOC388312       ENSG00000179571
LOC100132287    NONE
DQ597235        NONE
DQ599768        NONE

Добавление grep:

DDX11L9 ENSG00000163485
DDX11L1 ENSG00000152763
OR4F5   ENSG00000142599
LOC388312       ENSG00000179571
LOC100132287    NONE

, что соответствует вашему примеру вывода, за исключением заказа. Если вам нужно сохранить порядок, это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...