#! /bin/sh bacepics -v 1 2>/dev/null | awk ' BEGIN { k = split("analog-input analog-output analog-value binary-input \ binary-output binary-value calendar command devie event-enrollment file group \ loop multi-state-input multi-state-output notification-class program \ schedule averaging multi-state-value trend-log life-safty-point \ life-safety-zone accumulator pulse-converter event-log global-group \ trend-log-multiple load-control structured-view access-door -", ot, " ") } /^List of Objects in Test Device:/ { st = 1 next } st == 1 { if ($0 ~ /^ /) { st = 2 next } } st == 2 { if ($0 ~ /^}/) { st = 1 next } else if ($0 ~ /^ }/) { N++ next } else if ($0 ~ /^ object-identifier: \(device,/) { dev = $3; sub(/\)$/, "", dev) for (;;) { if ($1 == "object-name:") nam = sval($0) if ($1 == "model-name:") model = sval($0) getline if ($1 == "},") { print "Device", dev, nam, "(" model ")" next } } } else if ($1 == "object-identifier:") { num = $3; sub(/\)$/, "", num) id = $2; sub(/^\(/, "", id); sub(/,$/, "", id) ID[num] = id } else if ($1 == "object-name:") { name = $2 gsub(/"/, "", name) NAME[num] = name } else if ($1 == "object-type:") { type = $2 TYPE[num] = type } else if ($1 == "number-of-states:") { STATES[num] = $2 } else if ($1 == "units:") { UNITS[num] = $2 } } END { for (i = 1; i <= num; i++) if (NAME[i] != "") { printf "%2d %d(%s) %s", i, oid(TYPE[i]), TYPE[i], NAME[i] if (STATES[i] != "") printf " [%s]", STATES[i] if (UNITS[i] != "") printf " (%s)", UNITS[i] printf "\n" } } function sval(s) { s = substr(s, index(s, "\"") + 1) sub(/.$/, "", s) return s } function oid(s, i) { for (i = 1; i <= k; i++) if (ot[i] == s) break return i - 1 } ' exit 0