#! /usr/bin/awk -f ### ### TOPXML.AWK ### (c) 2003 Software Poetry ### http://www.softwarepoetry.com/webob ### ### Takes batch output from "top" and turns it into xml on stdout: ### ### top -b -n1 | topxml.awk ### top -b -n1 -p PID | topxml.awk ### top -b -n1 `cat /home/webob/webob.pid` | topxml.awk ### BEGIN { fInProcs = 0; print ""; } END { print "\t\n"; } ($1 == "CPU") \ { gsub(/\%/, ""); printf("\t\n\t\t%s\n", $3); printf("\t\t%s\n", $5); printf("\t\t%s\n", $7); printf("\t\t%s\n\t\n", $9); } ($1 == "Mem:") \ { gsub(/K/, ""); printf("\t\n\t\t%s\n", $2); printf("\t\t%s\n", $4); printf("\t\t%s\n\t\n", $6); } ($1 == "Swap:") \ { gsub(/K/, ""); printf("\t\n\t\t%s\n", $2); printf("\t\t%s\n", $4); printf("\t\t%s\n\t\n", $6); } ($1 == "PID") \ { fInProcs = 1; print "\t"; gsub(/\%/, ""); for (i = 1; i <= NF; ++i) rgszNames[i] = tolower($i); next; } { if (fInProcs) { print "\t\t"; gsub(/\r/, ""); gsub(/\&/, "\\&"); gsub(//, "\\>"); gsub(/\"/, "\\""); for (i = 1; i <= NF; ++i) printf("\t\t\t<%s>%s\n", rgszNames[i], $i, rgszNames[i]); print "\t\t"; } }