copia o cabeçalho em cada célula de sua linha

4

Eu tenho um arquivo:

AC  AF  AN
3   0.375   8
3   0.375   8

Eu quero a saída como:

AC  AF  AN
AC=3    AF=0.375    AN=8
AC=3    AF=0.375    AN=8

Existe algum comando unix para isso?

    
por Waqasuddin Khan 04.04.2017 / 14:56

3 respostas

7
awk '
  NR==1 {split($0,a); $1=$1} 
  NR>1 {for(i=1;i<=NF;i++) $i=a[i]"="$i} 
  1' OFS='\t' yourfile

Explicação:

  • divida o primeiro registro (linha de cabeçalho) em uma matriz, com base no separador de campos padrão; reassign $1 para que o registro seja gravado com o novo separador de campo de saída
  • para os registros restantes, faça um loop sobre os campos prefixando cada valor de campo com o elemento de matriz correspondente ao índice de campo, separado por =
  • imprime registros com tabulação como o separador do campo de saída
por 04.04.2017 / 15:47
3
< yourfile \
   perl -pale '
      $. == 1 and push(@A,@F),next;
      $_ = join $", map { "$A[$_]=$F[$_]" } 0..$#F;
   ' |
 column -t
    
por 04.04.2017 / 15:24
1
NR == 1 {
    for (i = 1; i <= NF; i++) {
        header[i] = $i
        printf "%s\t", $i
    }
    print ""
}

NR > 1 {
    for (i = 1; i <= NF; i++) {
        printf "%s=%s\t", header[i], $i
    }
    print ""
}

1. crie um arquivo chamado awkprog e cole o conteúdo acima nele.
2. assumindo que seu nome de arquivo seja data.txt .
3. Em seguida, execute awk -f awkprog data.txt

    
por 04.04.2017 / 16:18