Dividindo um arquivo grande por coluna com valores no cabeçalho como nomes de arquivos

3

Eu tenho um arquivo de texto grande delimitado por tabulações que contém um cabeçalho e dados. Eu quero dividir o arquivo em arquivos menores por coluna, com o cabeçalho excluído e os arquivos nomeados como o nome da coluna.

pos    red    green    blue
123    0|0    1|0      0|0
321    1|0    1|0      0|0
231    0|0    0|0      0|0
213    0|0    1|0      1|0

e eu preciso dividir os arquivos em:

pos.txt:
123
321
231
213

red.txt:
0|0
1|0
0|0
0|0

green.txt:
1|0
1|0
0|0
1|0

blue.txt:
0|0
0|0
0|0
1|0

Eu tentei:

awk 'NR==1{h=$0; next}
!seen[$3]++{f=${h[$3]}".txt"; print >> f}' infile

mas não está funcionando ...

    
por mariecuriosity 12.05.2016 / 23:44

1 resposta

3

Você poderia tentar assim:

awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i; next}
{for (i=1;i<=NF;i++) {print $i > a[i]".txt"}}' infile

Na linha de cabeçalho, isso salva o valor de cada campo em uma matriz e, em seguida, o restante das linhas imprime cada campo para o nome de arquivo correspondente.

    
por 12.05.2016 / 23:58