テキストの中央にある動的列から配列を作成する

テキストの中央にある動的列から配列を作成する

データベースにいくつのアプリケーションが接続されているかを知る必要があります。これを行うには、ストアドプロシージャを実行する必要があります。出力は次のとおりです。

  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は一度に1行ずつファイルを読み込みます。

  • /COMPLETE/{exit}

    現在の行がregexと一致する場合は、追加の行のCOMPLETE読み取りを停止し、ENDコマンドグループで終了します。

  • f{if($5+0>x)x=$5}

    変数fがtrue(0ではない)の場合、列5の数値が変数より大きい場合、列5の値にx設定されます。x

  • /CONNS/{f=1}

    現在の行に文字列(正規表現)が含まれている場合、CONNS変数はf1に設定されます。これはテーブルの開始を示します。

  • END{print x}

    すべての行を読み取ったら、値を印刷しますx

  • <<<"$conn_arr"

    bash変数から入力を読み取るようにawkに指示しますconn_arr。この構造はここにある文字列

関連情報