awkのmysqlクエリから単一の値を読み取ることはできません。 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
awkのlastdiff変数にVALUE値を読みたいです。推奨されるソリューション。
答え1
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
コマンドの各連続出力行の値を提供します。
スクリプトはwithの$lastdiff
代わりに使用します。これらのうち、現在の入力レコードのフィールド番号を表します。lastdiff
getline
awk
$lastdiff
lastdiff
答え2
bashで変数を生成し、-vフラグを使用してawkに渡す必要があります。
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