#!/usr/bin/awk -f BEGIN { FS=",|:"; used = 0; free = 0; zused = 0; zfree = 0; } function hsize(val) { if (val > 1024 ^ 3) { return sprintf("%.3fGB", val / 1024 ^3); } else if (val > 1024 ^ 2) { return sprintf("%.0fMB", val / 1024 ^2); } else if (val > 1024) { return sprintf("%.0fKB", val / 1024); } return sprintf("%db", val); } { if (NF != 8) { if ($0 ~ /^ITEM/) { print "ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP USED(H) FREE(H) TOTAL(H) FREE%"; } } else { used += ($2 * $4); free += ($2 * $5); gsub(/^[ \t]+/,"",$2); gsub(/^[ \t]+/,"",$3); gsub(/^[ \t]+/,"",$4); gsub(/^[ \t]+/,"",$5); gsub(/^[ \t]+/,"",$6); gsub(/^[ \t]+/,"",$7); if ($5 == 0) { freepct = 0; } else { freepct = sprintf("%d%%", $5 / (($4 + $5) / 100)); } warn = "" if (($2 * $5) > 50 * (1024 ^ 2)) { warn = "**" } printf("%-24s%6s,%10s,%10s,%10s,%10s,%10s,%10s,%10s,%10s,%10s,%10s%s\n", $1":", $2, $3, $4, $5, $6, $7, $8, hsize($2 * $4), hsize($2 * $5), hsize($2 * ($4 + $5)), freepct, warn); if ($1 ~ /^arc_|dmu_|dnode_|lz4_|range_seg_|reference_|sa_|zfs_|zio_/) { zused += ($2 * $4); zfree += ($2 * $5); } } } END { print "Totals" print "oused: " hsize(used - zused) ", ofree: " hsize(free - zfree) ", ototal: " hsize((free + used) - (zfree + zused)); print "zused: " hsize(zused) ", zfree: " hsize(zfree) ", ztotal: " hsize(zfree + zused); print "used: " hsize(used) ", free: " hsize(free) ", total: " hsize(free + used); }