Estou tentando obter a soma, 36962
, para ecoar $TOTAL
no final do script, mas não consigo fazê-lo funcionar. Algum conselho? Isto é para um projeto escolar e estou bastante enferrujado com Bash.
TOTAL=0
while read p; do
awk '{ if ($1 > 100 ) print TOTAL+=$1}'
echo $TOTAL
done < ipuniq.txt
- 6578
- 6723
- 32735
- 36962
- ECOS -> 0
A
TOTAL
variável é uma variável shell e, portantoawk
, não saberá sobre isso. Em seuawk
comando, aTOTAL
variável não é definida em cada iteração, portanto, está sendo redefinida com um único valor a cada vez e depois impressa.Além disso, parece inútil usar
awk
em um loop como este.awk
pode realizar esta operação por si só com o seguinte 1 liner:Sem loops ou outros comandos necessários.
No entanto, se sua tarefa exigir que você use bash/shell, você pode fazer:
Isso usará uma expressão aritmética do shell para verificar se o valor de
p
é maior que 100, se for, ele será adicionado atotal
.Observação adicional: adicionei a
-r
opção ao seuread
comando, pois isso imprimirá barras invertidas literalmente (provavelmente desnecessárias para o seu caso de uso, mas prefiro usar-r
sempre, a menos que tenha um motivo específico para não fazê-lo.)Eu também adicionei o
_
nome do parâmetro, isso impedirá quep
seja definido como uma entrada indesejável.read
atribuirá todas as palavras restantes ao último parâmetro, portanto, no seu caso, diga que seu arquivo contém números e IPs como:Sem um parâmetro para pegar o cruft,
p
seria definido como:então: