I have a variable called DISK_INFO
with the following contents:
diskid HGST HUSMH8010BSS204 serial no no [0] Slot00 diskid HGST HUH728080AL4204 serial no no [0] Slot02 diskid HGST HUH728080AL4204 serial no no [0] Slot03 diskid HGST HUH728080AL4204 serial no no [0] Slot04 diskid HGST HUH728080AL4204 serial no no [0] Slot05 diskid HGST HUH728080AL4204 serial no no [0] Slot06 diskid HGST HUH728080AL4204 serial no no [0] Slot07 diskid HGST HUH728080AL4204 serial no no [0] Slot08 diskid HGST HUH728080AL4204 serial no no [0] Slot09 diskid HGST HUH728080AL4204 serial no no [0] Slot10 diskid HGST HUH728080AL4204 serial no no [0] Slot11 diskid HGST HUH728080AL4204 serial no no [0] Slot12 diskid HGST HUH728080AL4204 serial no no [0] Slot13 diskid HGST HUH728080AL4204 serial no no [0] Slot14 diskid HGST HUH728080AL4204 serial no no [0] Slot15 diskid HGST HUH728080AL4204 serial no no [0] Slot16 diskid HGST HUH728080AL4204 serial no no [0] Slot17 diskid HGST HUH728080AL4204 serial no no [0] Slot18 diskid HGST HUH728080AL4204 serial no no [0] Slot19 diskid HGST HUH728080AL4204 serial no no [0] Slot20 diskid HGST HUH728080AL4204 serial no no [0] Slot21 diskid HGST HUH728080AL4204 serial no no [0] Slot22 diskid HGST HUH728080AL4204 serial no no [0] Slot23 diskid HGST HUH728080AL4204 serial no no [1] Slot00 diskid HGST HUH728080AL4204 serial no no [1] Slot01 diskid HGST HUH728080AL4204 serial no no [1] Slot02 diskid HGST HUH728080AL4204 serial no no [1] Slot03 diskid HGST HUH728080AL4204 serial no no [1] Slot04 diskid HGST HUH728080AL4204 serial no no [1] Slot05 diskid HGST HUH728080AL4204 serial no no [1] Slot06 diskid HGST HUH728080AL4204 serial no no [1] Slot07 diskid HGST HUH728080AL4204 serial no no [1] Slot08 diskid HGST HUH728080AL4204 serial no no [1] Slot09 diskid HGST HUH728080AL4204 serial no no [1] Slot10 diskid HGST HUH728080AL4204 serial no no [1] Slot11 c2t0d0 Kingston DataTraveler 2.0 - - - -
When a disk has failed it will be removed from this list, in this example the disk in enclosure 0 Slot 01 has failed.
Assuming enclosure 0 will always have 24 disks 00-23 and enclosure 1 will always have 12 disks 00-11, how can I efficiently and accurately determine the missing disk(s)?
I currently have the following but I'm sure this can be done in a single awk command:
enclosure0=($(awk '$7 ~ "[0]"{print $8}' <<<"$DISK_INFO" | sort -n)) enclosure1=($(awk '$7 ~ "[1]"{print $8}' <<<"$DISK_INFO" | sort -n)) for n in {00..23}; do grep -q "$n" <<<"${enclosure0[@]}" || missing+=("Enclosure 0 - Slot$n") done for n in {00..11}; do grep -q "$n" <<< "${enclosure1[@]}" || missing+=("Enclosure 1 - Slot$n") done