検索パターン間の特定の列の固有項目数の計算

検索パターン間の特定の列の固有項目数の計算

入力ファイル

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

関連情報