Прочитать результат столбца mysql в переменной awk

Я не могу прочитать отдельное ЗНАЧЕНИЕ из запроса mysql в awk. Я могу прочитать его в bash, но не могу в awk. Я хочу прочитать переменную результата в awk, так как я хочу запускать запрос только на основе некоторых динамических условий, записанных в 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

Я также пробовал использовать grep -Eo \ "[0-9] * \" / Это не помогает. Я использовал как system () , так и cmd | getline , чтобы получить результат в переменной, но он всегда возвращает 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 возвращает результат

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

Я хочу прочитать числовое ЗНАЧЕНИЕ в переменной lastdiff в awk. Любые рекомендуемые решения.

0
22.08.2017, 16:48
2 ответа

Вам нужно будет создать переменную в bash перед передачей ее в awk с -флагом v и так:

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 }'

В качестве альтернативы, если вы хотите проанализировать вывод mysql, выполните:

awk '{ some awk script }' <<< $cmd
0
28.01.2020, 02:45
mysql... | awk '{ print "diff is", $0 }'

Или просто

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

Изнутриawk:

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

Это запустит команду один раз для каждой строки ввода в сценарий awk. Без close()он был бы запущен один раз и давал бы valueзначение каждой последующей строки вывода команды.

Ваш скрипт использует $lastdiffвместо lastdiffс getline. В awk$lastdiffотносится к номеру поля lastdiffтекущей входной записи.

1
28.01.2020, 02:45

Теги

Похожие вопросы