como dividir um arquivo de matriz em arquivos separados mantendo o cabeçalho como nome de arquivo?

0

Eu tenho que dividir o arquivo de matriz em vários arquivos com base em cabeçalhos de coluna.
Entrada:

       Sample1  Sample2 Sample3 Sample4 Sample5      
id1     GG      GG      GG      GG      GG         
id2     AA      AA      AA      AA      AA            
id3     AA      AG      AA      AA      AA          
id4     AA      AA      AG      AA      AA

Saída esperada: (4 arquivos separados com cabeçalho de coluna como nome do arquivo)

Amostra1

id1 GG
id2 AA
id3 AA
id4 AA

Amostra2

id1 GG
id2 AA
id3 AG
id4 AA

...

    
por LiNi 25.09.2018 / 09:12

1 resposta

2

awk 'NR == 1 { for (i = 1; i <= NF; ++i) h[i] = $i; next }
             { for (i = 2; i <= NF; ++i) print $1, $i >h[i-1] }' file

Este script awk primeiro salva os cabeçalhos na matriz h , de forma que h[1] seja o primeiro cabeçalho, etc.

Para cada uma das outras linhas nos dados de entrada, ele imprimirá a primeira coluna junto com a coluna apropriada no arquivo nomeado corretamente (o nome do arquivo para a coluna i nos dados será h[i-1] ). / p>

O programa awk assume que haverá descritores de arquivo suficientes para manter todos os arquivos de saída abertos ao mesmo tempo (pode haver problemas com centenas ou milhares de colunas).

Se o arquivo usar guias para delimitadores, use awk -F '\t' ... para que os espaços sejam preservados adequadamente nos dados.

    
por 25.09.2018 / 11:41