Transpondo várias colunas é uma linha

1

Eu preciso transpor um arquivo desse formato

1 2 3 4  
6 7 8 9   
a b c d   
f g h i j 

para este formato

1 2 6 7 a b f g  
3 4 8 9 c d h k

duas colunas em uma única linha da maneira descrita acima.

Alguma sugestão ??

    
por user43405 19.07.2013 / 20:11

1 resposta

3

Assumindo que k na sua saída é um erro de digitação, aqui está uma maneira de fazer isso no bash

paste -d $'\n' <(cut -f1,2 -d' ' input.txt | tr -s $'\n' ' ') \
<(cut -f3,4 -d' ' input.txt | tr -s $'\n' ' ')

que produz

1 2 6 7 a b f g 
3 4 8 9 c d h i

Solução baseada no GNU awk

awk '{for (j = 1; j <= NF; ++j) arr[NR,j] = $j};
END{
  for (j=1; j <=NF; j+=2) for(i=1; i <=NR; ++i){
    printf i == 1?"": " "; printf arr[i,j]" "arr[i,j+1];
    if (i == NR) printf "\n"
  }
}' input.txt
    
por 19.07.2013 / 20:25