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