Como posso designar o intervalo dentro de uma coluna ao criar um arquivo awk?

0

Eu tenho este arquivo de dados que eu quero resolver, fazendo um arquivo awk . Eu quero encontrar a taxa média dentro de certa faixa etária. Por exemplo, de 10<age<20 e 20<age<30 . E não consigo encontrar uma maneira de calcular médias apenas para essas pessoas. Como posso fazer isso?

name rate hours age sex
AIDAN 3.5 19 22 M
AMELIA 5.25 16 13 F
NOAH 4.5 24 25 M
ISABELLA 4.25 17 15 F
LIAM 4.5 23 23 M
AVA 5.5 24 25 F
CAYDEN 6 21 28 M
    
por user164189 04.04.2016 / 15:14

3 respostas

2

Não sei se entendi a pergunta. Você quer ser capaz de obter dois resultados?

Caso não seja óbvio, a resposta do Archemar pode ser estendida para coletar várias estatísticas:

awk '($4 > 10) && ($4 < 20) { c10++; s10+=$2; }
     ($4 > 20) && ($4 < 30) { c20++; s20+=$2; }
     END { if (c10>0) print "average for 10-20:", s10/c10
           if (c20>0) print "average for 20-30:", s20/c20 }' …
  • Claro que é uma boa prática de programação inicializar suas variáveis. Mas awk inicializa variáveis para nulo, que age como zero quando usado em contextos matemáticos, então não é realmente necessário.
  • Como Archemar apontou, você pode exercer algum controle sobre o formato de saída (ou seja, como o resultado é gravado) com printf . Mas os padrões de awk (isto é, como ela implementa a instrução print ) são razoáveis.
  • Como Archemar apontou, você pode querer para emitir uma mensagem de erro explícita quando não há pessoas em um intervalo (em vez de apenas não reportar uma média).
por 04.04.2016 / 20:25
2

selecione a linha com $4 < 20 && $4 > 10

awk 'BEGIN { c=0 ; s=0 ; }
     ($4 < 20) && ($4 > 10) { c++ ; s+=$2 ; }
     END { if (c>0 ) printf "average %.1f\n",s/c ;}' ...

com uma mensagem de erro se nenhuma linha estiver selecionada.

    
por 04.04.2016 / 15:26
0

awk '{if ($ 4 > = 10 & $ 4 < = 20) {X = X + 1; Y = Y + $ 2}} END {impressão Y / X}' < infile

    
por 04.04.2016 / 15:27

Tags