Как напечатать вывод из обоих файлов, сопоставленных на одном столбце? - PullRequest
0 голосов
/ 09 января 2019

У меня есть два файла

 >vi cc4
163489921       ENSG00000145416
163490721       ENSG00000145416
163493030       ENSG00000145416
163494582       ENSG00000145416
163498263       ENSG00000145416
163506833       ENSG00000145416
163510223       ENSG00000145416
...

>vi bed_chr_4.bed
chr4    171975321       171975322       rs230   0       -
chr4    10204223        10204224        rs231   0       +
chr4    184363210       184363211       rs232   0       -
chr4    39547490        39547491        rs529   0       +
chr4    109740780       163489921       rs551   0       -
chr4    25929702        25929703        rs554   0       +
chr4    17624034        17624035        rs555   0       +
...

Я хотел бы обработать 1-й столбец cc4 и 3-й столбец bed_chr_4.bed и вывести совпадающие строки из bed_chr_4.bed плюс сопоставленный 2-й столбец из cc4. Вывод, который я хочу получить для этого образца, будет:

chr4    109740780       163489921       rs551   0       -     ENSG00000145416

Я пробовал это:

awk 'NR==FNR{a[$1]=$1;next}a[$3]{print $0}' cc4 bed_chr_4.bed >outfile

но я получаю только 6 совпадений столбцов от bed_chr_4.bed, а не 2-й столбец от cc4, в данном случае: ENSG00000145416

Я получаю только это:

chr4    109740780       163489921       rs551   0       - 

1 Ответ

0 голосов
/ 09 января 2019

Вы почти у цели. Проблема в том, что вы назначаете $1 на a[$1]. Пожалуйста, попробуйте вместо:

awk 'NR==FNR{a[$1]=$2;next} a[$3]{print $0 " " a[$3]}' cc4 bed_chr_4.bed > outfile

Точно, он основан на предположении, что 2-е поле cc4 содержит значение который оценивается, чтобы быть правдой. Может быть безопаснее сказать:

awk 'NR==FNR{a[$1]++;b[$1]=$2;next} a[$3] {print $0 " " b[$3]}' cc4 bed_chr_4.bed > outfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...