extrair linhas de um arquivo que corresponde ao segundo arquivo e mesclá-las como arquivo único

0

Eu tenho um arquivo que contém algumas posições,

head positions
142541687
142541814
142541910
142542976
142544533
142546366
142548674
142560386

Eu tenho outra pasta com 1800 arquivos, cada arquivo pertence a um indivíduo (1800 pessoas no total). A coluna 2 é a posição e a coluna 4 é a ID individual:

 head NA20507.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_dp
1   142541687   78 NA20507
1   142535975   79 NA20507
1   142535976   79 NA20507
1   142535977   77 NA20507
1   142535978   78 NA20507
1   142535979   77 NA20507

ou exemplo de outro indivíduo,

head NA20901.mapped.ILLUMINA.bwa.GIH.low_coverage.20120522.bam_dp
1   142541687   135 NA20901
1   142535975   135 NA20901
1   142535976   137 NA20901
1   142535977   138 NA20901
1   142535978   138 NA20901
1   142535979   136 NA20901
1   142535980   135 NA20901

Para cada arquivo individual, quero manter apenas as linhas que têm as posições do arquivo de posição (a segunda coluna do arquivo individual corresponde ao arquivo de posição), no entanto, quero armazená-lo para cada posição separadamente!

   cat NA20507.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_dp_match142541687
        1   142541687   78 NA20507

No final, quero combinar esses arquivos para todos os indivíduos: Isto é por exemplo para a posição 142541687

head desired_pos142541687
1   142541687   78  NA20507
1   142541687   135 NA20901

ou para a posição 142542976;

desired_pos142542976

    1   142535976   79 NA20507
    1   142535976   137 NA20901
    
por Anna1364 04.05.2018 / 20:07

1 resposta

1

Este é mais ou menos o mesmo tipo de resposta que alguns que você já teve para perguntas semelhantes: Leia um arquivo primeiro (as posições), analise os outros arquivos e extraia os dados.

awk 'NR == FNR { pos[$1]=1; next } $2 in pos { f="desired_pos" $2; print >>f; close(f) }' positions NA*.bam_dp

Se forem fornecidos os dois arquivos individuais na pergunta e se positions incluiu 142535975, isso criaria desired_pos142535975 com o seguinte conteúdo:

1   142535975   79 NA20507
1   142535975   135 NA20901

Isso funcionaria supondo que todas as posições se referissem ao cromossomo 1 (ou pelo menos ao cromossomo mesmo como nos arquivos individuais), já que não há informações do nome do cromossomo além da localização na positions file.

    
por 04.05.2018 / 20:36