计算搜索模式之间特定列中的唯一条目

计算搜索模式之间特定列中的唯一条目

输入文件

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

相关内容