Quando escrevo o script awk, imprimo uma linha várias vezes

1

Eu escrevi este script e imprimi a mesma linha várias vezes. o que fazer se eu quiser imprimi-lo apenas uma vez?

BEGIN {print "Average of salary"}
cnt=cnt+1
total=total+$3
avg=total/cnt
END {printf "Number of records:%d avg is:%d",cnt,avg}
    
por Shah Honey 29.04.2018 / 09:34

2 respostas

2

O problema é que você não incluiu o código abaixo entre chaves como a seguir e awk os atenderá como declaração True e imprimirá todas as linhas que ele ler:

{
    cnt=cnt+1
    total=total+$3
    avg=total/cnt
}

Mas, em vez disso, você poderia fazer algo como:

awk '{ avg=(total+=$3)/NR } END{ print "...", NR, avg }' <infile

O valor NR é incrementado em cada registro / linha awk lê o arquivo de entrada, significa que quando awk lê todas as linhas, o valor NR é o número da linha do arquivo. última linha (basicamente aponta para o R ecord N umber)

    
por 29.04.2018 / 09:53
1

Você quase consegue.

coloque a linha de cálculo em {} como

BEGIN { ...}
{ compute goes here}
END { printf "..."}

por que impressão tripla?

toda designação como foo=$3+foo é um teste positivo para o awk e a ação padrão é para imprimir linha.

(e, a propósito, você só precisa computar a média na cláusula END )

    
por 29.04.2018 / 09:53

Tags