Leia o resultado da coluna mysql na variável awk

0

Eu não consigo ler o valor único do mysql Query no awk.Eu sou capaz de lê-lo no bash mas não no awk. Eu quero ler a variável de resultado no awk como eu quero disparar a consulta apenas com base em algumas condições dinâmicas escritas no awk.

awk '{
 cmd="(mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe \"select VALUE from table where KEY='171-125';\")"
 cmd|getline $lastdiff;
 print "diff is "lastdiff;
}'


diff is

diff is

Eu tentei com grep -Eo \" [0-9]* \" também / Não está ajudando. Eu usei system() ou cmd | getline para obter o resultado em variável, mas ele está sempre retornando 0.

 sudo awk 'BEGIN {
>  myvalue=system("mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe \"select VALUE from table where KEY='171-125';\" ");
>  print "diff is ",myvalue;
> }'
diff is  0

Bash está dando o resultado

mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe "select VALUE from table where KEY='171-125';"
1

Eu quero ler o VALOR numérico na variável lastdiff no awk. Quaisquer soluções recomendadas.

    
por Aashu 22.08.2017 / 12:26

2 respostas

1

mysql ... | awk '{ print "diff is", $0 }'

Ou apenas

mysql ... 'SELECT CONCAT("diff is ", VALUE) FROM ...'

De dentro de awk :

awk 'BEGIN { cmd = "mysql ..." }
     { cmd | getline value;
       printf("diff is %s\n", value); # or print "diff is", value;
       close(cmd) }'

Isso executará o comando uma vez para cada linha de entrada no script awk . Sem o close() , ele seria executado uma vez e forneceria value o valor de cada linha de saída sucessiva do comando.

Seu script usa $lastdiff em vez de lastdiff com getline . Em awk , $lastdiff refere-se ao número de campo lastdiff do registro de entrada atual.

    
por 22.08.2017 / 12:36
0

Você precisará criar a variável no bash antes de passá-la para awk com o sinalizador -v e assim:

cmd=$(mysql --host='abc' --user='def' --password='..' --database='ghf' -sNe \"select VALUE from table where KEY='171-125';\")
awk -v cmd=$cmd '{ some awk script }'

Alternativamente, se você quiser analisar a saída do mysql, faça:

awk '{ some awk script }' <<< $cmd
    
por 22.08.2017 / 12:32