mesclar arquivos em um único dataframe

3

Eu tenho quase 160 arquivos txt, cada arquivo tem 7 colunas e agora eu quero colocar isso em um arquivo. Cada arquivo 1ª e 6ª coluna de dados (Geneid, Length) é o mesmo, então eu só quero que seja a 1ª e a 2ª coluna no arquivo final, e de todos os arquivos extraídos os dados da 7ª coluna (sample1, sample2, sample3 ... ..) e coloque no arquivo final.

Exemplo:

Amostra 1:

Geneid              Chr     Start   End Strand  Length  Sample1
ENSG00000223972.5   Chr1    34554   12227   ++  1735    0
ENSG00000227232.5   Chr2    14404   1450    ++  1351    12
ENSG00000278267.1   Chr3    17369   17436   ++   68     20
ENSG00000243485.4   Chr4    29554   3003    ++  1021    0
ENSG00000237613.2   Chr5    14404   35174   ++  1219    0

Amostra 2:

Geneid              Chr    Start    End Strand  Length  Sample2
ENSG00000223972.5   Chr1    11869   1450    ++  1735    180
ENSG00000227232.5   Chr2    14404   17436   ++  1351    40
ENSG00000278267.1   Chr3    17369   17436   ++   68     9
ENSG00000243485.4   Chr4    14404   3003    ++  1021    49
ENSG00000237613.2   Chr5    17369   3003    ++  1219    3

Amostra 3:

Geneid              Chr    Start    End Strand  Length  Sample3
ENSG00000223972.5   Chr1    17369   1450    ++  1735    11
ENSG00000227232.5   Chr2    29554   17436   ++  1351    156
ENSG00000278267.1   Chr3    34554   3003    ++  68      56
ENSG00000243485.4   Chr4    14404   3003    ++  1021    89
ENSG00000237613.2   Chr5    17369   35174   ++  1219    23

A saída final deve ser

Geneid            Length    Sample1 Sample2 Sample3
ENSG00000223972.5   1735    0       180      11
ENSG00000227232.5   1351    12      40      156
ENSG00000278267.1   68      20      9       56
ENSG00000243485.4   1021    0       49      89
ENSG00000237613.2   1219    0       3       23
    
por H.K 11.10.2017 / 12:21

1 resposta

3

Usando awk com paste (para a pergunta revisada).

awk '{printf("%s\t%s", $1, $6); 
    for(i=7;i<=NF;i+=7) printf ("\t%s", $i); printf "\n"}' <(paste files) >final_file

P: Altere os controles de formatação printf com base no valor real de seus campos.

Explicações:

  • {printf ("%s\t%s" ,$1, $6)} impressão 1 st e 6 th colunas primeiro.

  • for(i=7;i<=NF;i+=7) printf ("\t%s", $i); Então, com isso, estamos passando por campos de repouso e imprimindo apenas a coluna th e todos os campos com o módulo 7.

  • Primeiro, estamos colando todos os files juntos e passamos para awk . files significa que você pode alimentar paste com vários nomes de arquivos como myfiles* , e todos esses arquivos começam com myfiles seguido por qualquer coisa.

por 11.10.2017 / 12:53