入力ファイル
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