텍스트 중간에 있는 동적 열에서 배열 만들기

텍스트 중간에 있는 동적 열에서 배열 만들기

내 데이터베이스에 몇 개의 애플리케이션이 연결되어 있는지 알아야 합니다. 이를 위해 저장 프로시저를 실행해야 합니다. 출력은 다음과 같습니다.

  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변수가 f1로 설정됩니다. 이는 테이블의 시작을 표시합니다.

  • END{print x}

    모든 줄을 읽었으면 값을 인쇄합니다 x.

  • <<<"$conn_arr"

    bash 변수에서 입력을 읽도록 awk에 지시합니다 conn_arr. 이 구조는여기에 있는 문자열.

관련 정보