我需要知道从一个应用程序连接到我的数据库的连接数。为此,我应该运行一个存储过程。输出是这样的:
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
每次此脚本的结果和行号都会更改。我应该使用什么?
要获得最大连接数并将其保存在变量中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(非零),则如果第5列中的数字大于该变量x
,则将其设置x
为第5列中的值。
/CONNS/{f=1}
如果当前行包含字符串(regex)CONNS
,则将变量设置f
为一。这标志着表格的开始。
END{print x}
阅读完所有行后,输出的值x
。
<<<"$conn_arr"
告诉awk从bash变量读取其输入conn_arr
。这种构造称为here字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句