Как я могу напечатать строки из файла1 и файла2, где столбцы 9 в файле 1 меньше, чем столбец 4 в файле 2 - PullRequest
0 голосов
/ 28 февраля 2020

Мне нужна помощь. Я пытался безрезультатно. Как я могу напечатать строки из файла1 и файла2 в мой выходной файл, где столбец2 файла1 совпадает со столбцом1 файла2, тогда $ 9 файл1> = $ 4 файл2 && $ 10 файл1 <= $ 5 </p>

файл1

BG chr20   100.000 15      0       0       1       15      13242327        13242341        5.1     
BG chr2    100.000 15      0       0       1       15      70212527        70212541        5.1     
BG chr2    100.000 15      0       0       1       15      216745730       216745744       5.1     
BG chr1    100.000 15      0       0       1       15       6195235       6195335        5.1   

file2

chr1    hg38_refGene    stop_codon      67093005        67093007        
chr1    hg38_refGene    CDS     67093008        67093604        
chr2    hg38_refGene    exon    216645730       216845744        
chr1    hg38_refGene    CDS      6095235      6395421

вывод

BG chr2    100.000 15      0       0       1       15      216745730       216745744       5.1  chr2    hg38_refGene    exon    216645730       216845744 
BG chr1    100.000 15      0       0       1       15       6195235       6195335        5.1    chr1    hg38_refGene    CDS      6095235      6395421  

код

awk 'NR == FNR {A[$1] = $0; next} $1 in A {split(A[$1], T)} {if ( T[9] >= $4 && T[10] <= $5 )print A[$1], $0}' file1 file2 >output

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

join предназначен для этого. Предостережение заключается в том, что для объединения требуются два отсортированных входных файла (это часто ловушка для начинающих пользователей).

Итак, попробуйте это:

join -1 2  <( sort -k2,2 file1 ) <( sort file2 )

Вот вывод:

chr1 BG 100.000 15 0 0 1 15 6195235 6195335 5.1 hg38_refGene CDS 6095235 6395421
chr1 BG 100.000 15 0 0 1 15 6195235 6195335 5.1 hg38_refGene CDS 67093008 67093604
chr1 BG 100.000 15 0 0 1 15 6195235 6195335 5.1 hg38_refGene stop_codon 67093005 67093007
chr2 BG 100.000 15 0 0 1 15 216745730 216745744 5.1 hg38_refGene exon 216645730 216845744
chr2 BG 100.000 15 0 0 1 15 70212527 70212541 5.1 hg38_refGene exon 216645730 216845744

Затем вы можете использовать awk, чтобы изменить порядок столбцов, если хотите.

0 голосов
/ 28 февраля 2020

ваш ключ из файла 1 - это поле 2, а не 1.

$ awk 'NR==FNR {a[$2]=$0; next} 
       $1 in a {split(a[$1],t); 
                if(t[9]>=$4 && t[10]<=$5) print a[$1], $0}' file1 file2 | column -t

BG  chr2  100.000  15  0  0  1  15  216745730  216745744  5.1  chr2  hg38_refGene  exon  216645730  216845744
BG  chr1  100.000  15  0  0  1  15  6195235    6195335    5.1  chr1  hg38_refGene  CDS   6095235    6395421
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...