내 데이터베이스에 몇 개의 애플리케이션이 연결되어 있는지 알아야 합니다. 이를 위해 저장 프로시저를 실행해야 합니다. 출력은 다음과 같습니다.
CMD_EXEC: 1
IFCA_RET: 0
IFCA_RES: 0
XS_BYTES: 0
IFCA_GRES: 0
GXS_BYTES: 0
RETURN_CODE: 0
MSG: NULL
ROWNUM TEXT
1 DSNL200I -DSNC DISPLAY LOCATION REPORT FOLLOWS-
2 LOCATION PRDID T ATT CONNS
3 ::170.0.0.236 SQL09079 S 277
4 ::170.0.0.243 SQL10057 S 0
5 ::170.0.0.249 JCC04160 S 0
6 ::170.0.0.252 JCC03660 S 0
7 ::170.0.0.204 JCC04160 S 0
8 ::170.0.0.20 SQL10057 S 1
9 ::170.0.0.21 JCC03660 S 0
10 ::170.0.1.21 JCC04080 S 1440
11 ::170.0.1.231 JCC03660 S 1
12 ::170.0.7.2 JCC03640 S 0
13 ::170.0.8.241 JCC03640 S 0
14 ::170.0.8.142 JCC03690 S 0
15 ::192.168.7.2 SQL09079 S 0
16 ::192.168.1.4 JCC03650 S 5
17 ::192.168.1.5 JCC03650 S 6
18 ::192.168.1.0 JCC03690 S 0
19 ::192.168.4.0 JCC03610 S 7
20 ::192.168.4.0 JCC03610 S 2
21 ::192.168.4.0 JCC04080 S 504
22 ::192.168.1.7 SQL10055 S 1
23 DISPLAY LOCATION REPORT COMPLETE
"ADMIN_COMMAND_DB21" RETURN_STATUS: 0
이 열에 CONNS
는 연결 수가 표시됩니다. 해당 열로 배열을 만들고 최대값을 찾아야 합니다. 예를 들어 다음과 같습니다.
#/bin/bash
#number of logs to offload
#number of ADBAT
#number of QUEDBAT
#number of DSCDBAT
#nmber of connections
DB2PATH=/home/db2inst1/sqllib/bin/db2
$DB2PATH connect to mydb >> /dev/null
conn_arr=$($DB2PATH "CALL SYSPROC.ADMIN_COMMAND_DB21 ('-dis
location',17,LOC,NULL,?,?,?,?,?,?,?,?)" )
echo "$conn_arr" | ????
$DB2PATH connect reset >> /dev/null
이 스크립트가 실행될 때마다 결과와 줄 번호가 변경됩니다. 무엇을 사용해야 합니까?
답변1
최대 연결 수를 얻고 해당 수를 변수에 저장하려면 mx
다음을 시도하십시오.
$ mx=$(awk '/COMPLETE/{exit} f{if($5+0>x)x=$5} /CONNS/{f=1} END{print x}' <<<"$conn_arr")
$ echo $mx
1440
어떻게 작동하나요?
기본적으로 awk는 한 번에 한 줄씩 파일을 읽습니다.
/COMPLETE/{exit}
현재 줄이 regex 와 일치하면
COMPLETE
추가 줄 읽기를 중지하고END
명령 그룹으로 종료합니다.f{if($5+0>x)x=$5}
변수
f
가 true(0이 아님)인 경우 열 5의 숫자가 변수보다 크면 열 5의 값으로x
설정됩니다 .x
/CONNS/{f=1}
현재 줄에 문자열(정규식)이 포함되어 있으면
CONNS
변수가f
1로 설정됩니다. 이는 테이블의 시작을 표시합니다.END{print x}
모든 줄을 읽었으면 값을 인쇄합니다
x
.<<<"$conn_arr"
bash 변수에서 입력을 읽도록 awk에 지시합니다
conn_arr
. 이 구조는여기에 있는 문자열.