mysql 열 결과를 awk 변수로 읽습니다.

mysql 열 결과를 awk 변수로 읽습니다.

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대신을 사용합니다 . 그 중 은 현재 입력 레코드의 필드 번호를 나타냅니다 .lastdiffgetlineawk$lastdifflastdiff

답변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

관련 정보