usando variável entre aspas

2
awk -v input="$constrained" '
    BEGIN {
        n = split(toupper(input), user)
        fmt = "%-4s %-8s     NNN    0.050 0.050  0.050\n"
    }
    {print}
    /<< matched line >>/ {
        for (i=1; i<=n; i++)
            printf fmt, user[i], user[i]"_GPS"
        exit
    }
' ./text_data > text_data_2

Nos códigos acima, desejo definir uma variável para 0.050 0.050 0.050 . Eu tentei usar com

echo -n "##### numeric value?  ####?"
read value
fmt = "%-4s %-8s     NNN    $value $value  $value\n"

mas dentro das aspas, a variável $value não pode ser definida. Como posso definir essa variável dentro das aspas?

    
por deepblue_86 17.08.2016 / 15:48

1 resposta

4

Você deve ser capaz de passar a variável usando -v da mesma forma que você usa para a variável input

awk -v input="$constrained" -v value="0.05"

use sprintf em seu bloco BEGIN para construir a string de formato, por exemplo,

BEGIN {
  n = split(toupper(input), user);
  fmt = sprintf("%%-4s %%-8s     NNN    %-4.3f %-4.3f %-4.3f\n", value, value, value, value);
}

Observe o uso de %% para produzir literal % na string fmt .

Para testar se está construindo a string de formato correta, podemos adicionar instruções de impressão, primeiro para a própria string fmt e, em seguida, para a instrução print resultante:

$ awk -v value="0.05" '
    BEGIN{
      fmt = sprintf("%%-4s %%-8s     NNN    %-4.3f %-4.3f %-4.3f\n", value, value, value, value);
      print fmt;
      printf(fmt, "test", "testval");
    }'
%-4s %-8s     NNN    0.050 0.050 0.050

test testval      NNN    0.050 0.050 0.050
    
por steeldriver 17.08.2016 / 16:13