검색 패턴 간 특정 열의 고유 항목 수 계산

검색 패턴 간 특정 열의 고유 항목 수 계산

입력 파일

Device Robot Drive       Robot                    Drive                Device      Second
Type     Num Index  Type DrNum Status  Comment    Name                 Path        Device Path
robot      0    -    TLD    -       -  -          -                    /dev/sg66
  drive    -    0 hcart2    3      UP  -          IBM.ULT3580-TD5.006  /dev/nst17
  drive    -    1 hcart2    4      UP  -          IBM.ULT3580-TD5.000  /dev/nst16
  drive    -    2 hcart2    5      UP  -          IBM.ULT3580-TD5.001  /dev/nst15
  drive    -    3 hcart2    6      UP  -          IBM.ULT3580-TD5.002  /dev/nst14
  drive    -    4 hcart2    2      UP  -          IBM.ULT3580-TD5.007  /dev/nst13
  drive    -    5 hcart2    1      UP  -          IBM.ULT3580-TD5.008  /dev/nst12
  drive    -    6 hcart2   12    DOWN  -          IBM.ULT3580-TD5.003  /dev/nst11
  drive    -    6 hcart2   12    DOWN  -          IBM.ULT3580-TD5.003  /dev/nst1
  drive    -    7 hcart2   10      UP  -          IBM.ULT3580-TD5.004  /dev/nst10
  drive    -    7 hcart2   10      UP  -          IBM.ULT3580-TD5.004  /dev/nst9
  drive    -    8 hcart2    9      UP  -          IBM.ULT3580-TD5.005  /dev/nst5
  drive    -    8 hcart2    9      UP  -          IBM.ULT3580-TD5.005  /dev/nst6
  drive    -    9 hcart2    8      UP  -          IBM.ULT3580-TD5.009  /dev/nst4
  drive    -    9 hcart2    8    DOWN  -          IBM.ULT3580-TD5.009  /dev/nst2
  drive    -   10 hcart2    7      UP  -          IBM.ULT3580-TD5.010  /dev/nst3
  drive    -   10 hcart2    7      UP  -          IBM.ULT3580-TD5.010  /dev/nst0
robot      1    -    TLD    -       -  -          -                    /dev/sg55
  drive    -   11 hcart2    4      UP  -          IBM.ULT3580-HH5.000  /dev/nst19
  drive    -   12 hcart2    2      UP  -          IBM.ULT3580-HH5.001  /dev/nst18
  drive    -   13 hcart2    1      UP  -          IBM.ULT3580-HH5.002  /dev/nst8
  drive    -   14 hcart2    3      UP  -          IBM.ULT3580-HH5.003  /dev/nst7

로봇 0에 11개의 드라이브(필드 3의 고유 개수)가 있고 로봇 1에 4개의 드라이브가 있는지 알아보거나 변수에 넣고 싶습니다.

awk NR>2를 통해 실행하는 라인 1 2를 무시해야 합니다.

로봇 0,1,2,3이 많이 있을 수 있어서 일반 코드가 필요해서 awk를 사용해 보았지만 명확한 코드를 얻을 수 없었습니다.

산출

robot 0 : 11 
robot 1 : 4

등.

답변1

Awk해결책:

awk '/robot/{ 
         if (r){ printf "%s : %d\n", r, c; c=0; delete a } 
         r = $1 OFS $2; 
     }
     /drive/ && !a[$3]++{ c++ }
     END{ printf "%s : %d\n", r, c }' file
  • r = $1 OFS $2-"로봇"이름
  • delete a- 배열의 모든 요소를 ​​삭제합니다 a. (다음 명령문은 배열을 지우는 이식 가능하지만 명확하지 않은 방법을 제공합니다 split("", array). :)
  • c++- 고유 계산"운전하다"숫자"로봇"

산출:

robot 0 : 11
robot 1 : 4

답변2

awk '$1=="robot" && $2 == "1" {x=NR+5} (NR<=x) {print}' test  | awk '{print $3}' | sed '/-/d' |wc -l | awk '{print "robot1:" " "  $0}'

로봇 1:4

 awk 'NR >2 {print $0}' test  |sed -n '/robot/,/robot/{x;p;d;};x'| sed '/^$/d' | sed '/robot/d' | awk '{print $3}' | sort | uniq | wc -l | awk '{print "robot0:" " " $1}'

로봇 0:11

관련 정보