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