média de linhas específicas em um arquivo e saída no arquivo delimitado por tabulação

2

Eu tenho 6 linhas em arquivos. Eu preciso encontrar média apenas de linhas específicas em um arquivo e os outros devem ser deixados como estão. A média deve ser calculada para A1 e A2, B1 e B2, outras linhas devem permanecer como estão. Existem n colunas no total.

Entrada:

A1  1   1   2
A2  5   6   1   
A3  1   1   1   
B1  10  12  12
B2  10  12  10
B3  100 200 300

Saída:

A1A2  3    3.5   1.5     
A3    1    1     1
B1B2  10   12    11    
B3    100  200   300

O script está seguindo. No entanto, a saída não é delimitada por tabulação. Como posso fazer isso delimitado por tabulações?

$ cat tst.awk
$1 ~ /^[AB]1$/ { for (i=2;i<=NF;i++) val[$1,i]=$i; next }
$1 ~ /^[AB]2$/ { p=$1; sub(2,1,p); $1=p $1; for (i=2;i<=NF;i++) $i=($i + val[p,i])/2 }
{ print }

$ awk -f tst.awk file | column -t
A1A2  3    3.5  1.5
A3    1    1    1
B1B2  10   12   11
B3    100  200  300
    
por Anni 21.03.2016 / 19:00

2 respostas

1

Adicione BEGIN { OFS="\t" } no início do script awk e altere { print } para {print $1, $2, $3, $4} . Isso mudará o separador de campo de saída do awk para tab do padrão de espaço.

EDIT:

Para n colunas, você pode usar {$1 = $1; print} em vez de {print} . Não sei como isso funciona internamente, mas funciona quando eu testo.

    
por 21.03.2016 / 19:25
0

Mais um awk pode fazer a coisa

awk -f tst.awk file | column -t | awk -v OFS='\t' '{ print $1,$2,$3,$4 }'
    
por 21.03.2016 / 19:25