입력 파일
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