我需要知道有多少应用程序连接到我的数据库。为此我应该运行一个存储过程。输出如下:
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
为真(非零),则如果第 5 列中的数字大于变量x
,则设置x
为第 5 列中的值。/CONNS/{f=1}
如果当前行包含字符串 (regex)
CONNS
,则将变量设置f
为 1。这标志着表的开始。END{print x}
当我们读完所有行后,打印 的值
x
。<<<"$conn_arr"
告诉 awk 从 bash 变量读取其输入
conn_arr
。这个构造被称为这里的字符串。