Olá Dito, funcionou colocando ENVIRON["n3"] 'no meio' do formato do printf.
Abraços Paulo
div_awk(){
n1=$1;n2=$2;n3=$3;export n1 n2 n3
divisao=$(awk 'BEGIN {printf "" ENVIRON["n1"] "/" ENVIRON["n2"] "=" "%."ENVIRON["n3"]"f\n", ENVIRON["n1"] /
ENVIRON["n2"]; print "(com "ENVIRON["n3"] ""; print "casas decimais.)"}')
echo $divisao;}
$ div_awk 20 3 3
20/3=6.667 (com 3 casas decimais.)
$ div_awk4 20 3 7
20/3=6.6666667 (com 7 casas decimais.)
ou com a opção -v
div_awk(){
divisao=$(awk -v n1=$1 -v n2=$2 -v n3=$3 'BEGIN {printf "" n1 "/" n2 "=" "%."n3"f\n", n1/n2; print "(com "n3
""; print "casas decimais.)"}')
echo $divisao;}
$ div_awk 10 3 4
10/3=3.3333 (com 4 casas decimais.)
On 02-08-2017 20:52, Dito Ramos address@hidden [shell-script] wrote:
> Olá, Mestres.
> Estou "desenferrujando" meus conhecimentos sobre AWK.
> Então preciso da ajuda de quem puder.
> Meu script:
>
> #!/bin/bash
>
> # USANDO O AWK PARA DIVIDIR E FORMATAR CASAS DECIMAIS DE VALORES PASSADOS POR VARIÁVEIS DO SHELL
> # SINTAXE: ./myscript.sh $1 $2 $3
> # Onde: $1=Dividendo
> # $2=Divisor
> # $3=Número de casas decimais do retorno
>
> # BEGIN ####
>
> clear
> n1=$1
> n2=$2
> n3=$3
> export n1
> export n2
> export n3
> echo ""
> divisao=$(awk 'BEGIN {printf "" ENVIRON["n1"] "/" ENVIRON["n2"] "=" "%.5f\n", ENVIRON["n1"] / ENVIRON["n2"] ;
> print "(com "ENVIRON["n3"] ""; print "casas decimais.)"}')
> echo "Sintaxe passada: ./my_script $1 $2 $3"
> echo ""
> echo "Retorno: " $divisao
> echo ""
>
> # END ####
>
> Meu problema:
> Tentei, de todas as formas, passar a variável $3 para o trecho "%.5f\n", mas não consigo.
> Pergunto: podem ajudar sobre como concatenar a variável passada no SHELL, no comando AWK?
>
> Grato desde já.
>
> Dito Ramos
>
>
> ----------------------------------------------------------
> Enviado por: Dito Ramos <address@hidden>
> ----------------------------------------------------------
>From address@hidden Tue Aug 08 01:57:15 2017
Return-Path: