Encontrei este exemplo em uma palestra de Brian Kernighan. para somar os preços dos itens alimentares em uma tabela de duas colunas
#!/usr/bin/awk -f
{amount[$1] += $2}
END {for (name in amount)
print name, amount[name] | "sort -k1 "
print "Finished processing everything!"
}
A última declaração de impressão print "Finished...."
é minha pequena adição.
para a entrada
pizza 200
beer 100
pizza 500
beer 50
ele produz a saída
Finished processing everything!
beer 150
pizza 700
ou seja, soma os preços da cerveja e as entradas da pizza. O que não entendo é como a última instrução de impressão que adicionei foi executada antes do loop for.
Além disso, por que a | sort...
instrução está dentro do for
loop? Não deveria ser após o loop for após toda a impressão ter sido feita, mais ou menos como alguém faria a mesma coisa na linha de comando bash via
cat file | sort
?
AWK(1P) tem uma seção sobre
Output Statements
Na
awk
tubulação cria um fluxo que permanece aberto até que você o feche. Isso permite que ele seja usado em loop. Usando seu exemplo:Isso fecha
sort -k1
, permitindo que seja impresso.