输入文件
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