---input--- #!/bin/awk -f BEGIN { # It is not possible to define output file names here because # FILENAME is not define in the BEGIN section n = ""; printf "Generating data files ..."; network_max_bandwidth_in_byte = 10000000; network_max_packet_per_second = 1000000; last3 = 0; last4 = 0; last5 = 0; last6 = 0; } { if ($1 ~ /Average/) { # Skip the Average values n = ""; next; } if ($2 ~ /all/) { # This is the cpu info print $3 > FILENAME".cpu.user.dat"; # print $4 > FILENAME".cpu.nice.dat"; print $5 > FILENAME".cpu.system.dat"; # print $6 > FILENAME".cpu.iowait.dat"; print $7 > FILENAME".cpu.idle.dat"; print 100-$7 > FILENAME".cpu.busy.dat"; } if ($2 ~ /eth0/) { # This is the eth0 network info if ($3 > network_max_packet_per_second) print last3 > FILENAME".net.rxpck.dat"; # Total number of packets received per second. else { last3 = $3; print $3 > FILENAME".net.rxpck.dat"; # Total number of packets received per second. } if ($4 > network_max_packet_per_second) print last4 > FILENAME".net.txpck.dat"; # Total number of packets transmitted per second. else { last4 = $4; print $4 > FILENAME".net.txpck.dat"; # Total number of packets transmitted per second. } if ($5 > network_max_bandwidth_in_byte) print last5 > FILENAME".net.rxbyt.dat"; # Total number of bytes received per second. else { last5 = $5; print $5 > FILENAME".net.rxbyt.dat"; # Total number of bytes received per second. } if ($6 > network_max_bandwidth_in_byte) print last6 > FILENAME".net.txbyt.dat"; # Total number of bytes transmitted per second. else { last6 = $6; print $6 > FILENAME".net.txbyt.dat"; # Total number of bytes transmitted per second. } # print $7 > FILENAME".net.rxcmp.dat"; # Number of compressed packets received per second (for cslip etc.). # print $8 > FILENAME".net.txcmp.dat"; # Number of compressed packets transmitted per second. # print $9 > FILENAME".net.rxmcst.dat"; # Number of multicast packets received per second. } # Detect which is the next info to be parsed if ($2 ~ /proc|cswch|tps|kbmemfree|totsck/) { n = $2; } # Only get lines with numbers (real data !) if ($2 ~ /[0-9]/) { if (n == "proc/s") { # This is the proc/s info print $2 > FILENAME".proc.dat"; # n = ""; } if (n == "cswch/s") { # This is the context switches per second info print $2 > FILENAME".ctxsw.dat"; # n = ""; } if (n == "tps") { # This is the disk info print $2 > FILENAME".disk.tps.dat"; # total transfers per second print $3 > FILENAME".disk.rtps.dat"; # read requests per second print $4 > FILENAME".disk.wtps.dat"; # write requests per second print $5 > FILENAME".disk.brdps.dat"; # block reads per second print $6 > FILENAME".disk.bwrps.dat"; # block writes per second # n = ""; } if (n == "kbmemfree") { # This is the mem info print $2 > FILENAME".mem.kbmemfree.dat"; # Amount of free memory available in kilobytes. print $3 > FILENAME".mem.kbmemused.dat"; # Amount of used memory in kilobytes. This does not take into account memory used by the kernel itself. print $4 > FILENAME".mem.memused.dat"; # Percentage of used memory. # It appears the kbmemshrd has been removed from the sysstat output - ntolia # print $X > FILENAME".mem.kbmemshrd.dat"; # Amount of memory shared by the system in kilobytes. Always zero with 2.4 kernels. # print $5 > FILENAME".mem.kbbuffers.dat"; # Amount of memory used as buffers by the kernel in kilobytes. print $6 > FILENAME".mem.kbcached.dat"; # Amount of memory used to cache data by the kernel in kilobytes. # print $7 > FILENAME".mem.kbswpfree.dat"; # Amount of free swap space in kilobytes. # print $8 > FILENAME".mem.kbswpused.dat"; # Amount of used swap space in kilobytes. print $9 > FILENAME".mem.swpused.dat"; # Percentage of used swap space. # n = ""; } if (n == "totsck") { # This is the socket info print $2 > FILENAME".sock.totsck.dat"; # Total number of used sockets. print $3 > FILENAME".sock.tcpsck.dat"; # Number of TCP sockets currently in use. # print $4 > FILENAME".sock.udpsck.dat"; # Number of UDP sockets currently in use. # print $5 > FILENAME".sock.rawsck.dat"; # Number of RAW sockets currently in use. # print $6 > FILENAME".sock.ip-frag.dat"; # Number of IP fragments currently in use. # n = ""; } } } END { print " '" FILENAME "' done."; } ---tokens--- '#!/bin/awk -f' Comment.Single '\n\n' Text 'BEGIN' Name.Builtin ' ' Text '{' Punctuation '\n ' Text '# It is not possible to define output file names here because' Comment.Single '\n ' Text '# FILENAME is not define in the BEGIN section' Comment.Single '\n ' Text 'n' Name.Other ' ' Text '=' Operator ' ' Text '""' Literal.String.Double ';' Punctuation '\n ' Text 'printf' Keyword.Reserved ' ' Text '"Generating data files ..."' Literal.String.Double ';' Punctuation '\n ' Text 'network_max_bandwidth_in_byte' Name.Other ' ' Text '=' Operator ' ' Text '10000000' Literal.Number.Integer ';' Punctuation '\n ' Text 'network_max_packet_per_second' Name.Other ' ' Text '=' Operator ' ' Text '1000000' Literal.Number.Integer ';' Punctuation '\n ' Text 'last3' Name.Other ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n ' Text 'last4' Name.Other ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n ' Text 'last5' Name.Other ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n ' Text 'last6' Name.Other ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Punctuation '\n' Text '}' Punctuation '\n' Text '{' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '1' Literal.Number.Integer ' ' Text '~' Operator ' ' Text '/Average/' Literal.String.Regex ')' Punctuation '\n ' Text '{' Punctuation ' ' Text '# Skip the Average values' Comment.Single '\n ' Text 'n' Name.Other ' ' Text '=' Operator ' ' Text '""' Literal.String.Double ';' Punctuation '\n ' Text 'next' Keyword.Reserved ';' Punctuation '\n ' Text '}' Punctuation '\n\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '2' Literal.Number.Integer ' ' Text '~' Operator ' ' Text '/all/' Literal.String.Regex ')' Punctuation '\n ' Text '{' Punctuation ' ' Text '# This is the cpu info' Comment.Single '\n ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '3' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".cpu.user.dat"' Literal.String.Double ';' Punctuation '\n' Text '#\t print $4 > FILENAME".cpu.nice.dat";' Comment.Single '\n ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '5' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".cpu.system.dat"' Literal.String.Double ';' Punctuation '\n' Text '# print $6 > FILENAME".cpu.iowait.dat";' Comment.Single '\n ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '7' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".cpu.idle.dat"' Literal.String.Double ';' Punctuation '\n ' Text 'print' Keyword.Reserved ' ' Text '100' Literal.Number.Integer '-' Operator '$' Operator '7' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".cpu.busy.dat"' Literal.String.Double ';' Punctuation '\n ' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '2' Literal.Number.Integer ' ' Text '~' Operator ' ' Text '/eth0/' Literal.String.Regex ')' Punctuation '\n ' Text '{' Punctuation ' ' Text '# This is the eth0 network info' Comment.Single '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '3' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'network_max_packet_per_second' Name.Other ')' Punctuation '\n\t' Text 'print' Keyword.Reserved ' ' Text 'last3' Name.Other ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.rxpck.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of packets received per second.' Comment.Single '\n ' Text 'else' Keyword '\n\t' Text '{' Punctuation '\n\t ' Text 'last3' Name.Other ' ' Text '=' Operator ' ' Text '$' Operator '3' Literal.Number.Integer ';' Punctuation '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '3' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.rxpck.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of packets received per second.' Comment.Single '\n\t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '4' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'network_max_packet_per_second' Name.Other ')' Punctuation '\n\t' Text 'print' Keyword.Reserved ' ' Text 'last4' Name.Other ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.txpck.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of packets transmitted per second.' Comment.Single '\n ' Text 'else' Keyword '\n\t' Text '{' Punctuation '\n\t ' Text 'last4' Name.Other ' ' Text '=' Operator ' ' Text '$' Operator '4' Literal.Number.Integer ';' Punctuation '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '4' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.txpck.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of packets transmitted per second.' Comment.Single '\n\t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '5' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'network_max_bandwidth_in_byte' Name.Other ')' Punctuation '\n\t' Text 'print' Keyword.Reserved ' ' Text 'last5' Name.Other ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.rxbyt.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of bytes received per second.' Comment.Single '\n ' Text 'else' Keyword '\n\t' Text '{' Punctuation '\n\t ' Text 'last5' Name.Other ' ' Text '=' Operator ' ' Text '$' Operator '5' Literal.Number.Integer ';' Punctuation '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '5' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.rxbyt.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of bytes received per second.' Comment.Single '\n\t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '6' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'network_max_bandwidth_in_byte' Name.Other ')' Punctuation '\n\t' Text 'print' Keyword.Reserved ' ' Text 'last6' Name.Other ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.txbyt.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of bytes transmitted per second.' Comment.Single '\n ' Text 'else' Keyword '\n\t' Text '{' Punctuation '\n\t ' Text 'last6' Name.Other ' ' Text '=' Operator ' ' Text '$' Operator '6' Literal.Number.Integer ';' Punctuation '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '6' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".net.txbyt.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of bytes transmitted per second.' Comment.Single '\n\t' Text '}' Punctuation '\n' Text '# print $7 > FILENAME".net.rxcmp.dat"; # Number of compressed packets received per second (for cslip etc.).' Comment.Single '\n' Text '# print $8 > FILENAME".net.txcmp.dat"; # Number of compressed packets transmitted per second.' Comment.Single '\n' Text '# print $9 > FILENAME".net.rxmcst.dat"; # Number of multicast packets received per second.' Comment.Single '\n ' Text '}' Punctuation '\n\n ' Text '# Detect which is the next info to be parsed' Comment.Single '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '2' Literal.Number.Integer ' ' Text '~' Operator ' ' Text '/proc|cswch|tps|kbmemfree|totsck/' Literal.String.Regex ')' Punctuation '\n ' Text '{' Punctuation '\n ' Text 'n' Name.Other ' ' Text '=' Operator ' ' Text '$' Operator '2' Literal.Number.Integer ';' Punctuation '\n ' Text '}' Punctuation '\n\n ' Text '# Only get lines with numbers (real data !)' Comment.Single '\n ' Text 'if' Keyword ' ' Text '(' Punctuation '$' Operator '2' Literal.Number.Integer ' ' Text '~' Operator ' ' Text '/[0-9]/' Literal.String.Regex ')' Punctuation '\n ' Text '{' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation 'n' Name.Other ' ' Text '==' Operator ' ' Text '"proc/s"' Literal.String.Double ')' Punctuation '\n\t' Text '{' Punctuation ' ' Text '# This is the proc/s info' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '2' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".proc.dat"' Literal.String.Double ';' Punctuation '\n' Text '#\t n = "";' Comment.Single '\n\t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation 'n' Name.Other ' ' Text '==' Operator ' ' Text '"cswch/s"' Literal.String.Double ')' Punctuation '\n\t' Text '{' Punctuation ' ' Text '# This is the context switches per second info' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '2' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".ctxsw.dat"' Literal.String.Double ';' Punctuation '\n' Text '#\t n = "";' Comment.Single '\n\t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation 'n' Name.Other ' ' Text '==' Operator ' ' Text '"tps"' Literal.String.Double ')' Punctuation '\n\t' Text '{' Punctuation ' ' Text '# This is the disk info' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '2' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".disk.tps.dat"' Literal.String.Double ';' Punctuation ' ' Text '# total transfers per second' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '3' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".disk.rtps.dat"' Literal.String.Double ';' Punctuation ' ' Text '# read requests per second' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '4' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".disk.wtps.dat"' Literal.String.Double ';' Punctuation ' ' Text '# write requests per second' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '5' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".disk.brdps.dat"' Literal.String.Double ';' Punctuation ' ' Text '# block reads per second' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '6' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".disk.bwrps.dat"' Literal.String.Double ';' Punctuation ' ' Text '# block writes per second' Comment.Single '\n' Text '#\t n = "";' Comment.Single '\n\t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation 'n' Name.Other ' ' Text '==' Operator ' ' Text '"kbmemfree"' Literal.String.Double ')' Punctuation '\n\t' Text '{' Punctuation ' ' Text '# This is the mem info' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '2' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".mem.kbmemfree.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Amount of free memory available in kilobytes.' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '3' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".mem.kbmemused.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Amount of used memory in kilobytes. This does not take into account memory used by the kernel itself.' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '4' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".mem.memused.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Percentage of used memory.' Comment.Single '\n' Text '# It appears the kbmemshrd has been removed from the sysstat output - ntolia' Comment.Single '\n' Text '#\t print $X > FILENAME".mem.kbmemshrd.dat"; # Amount of memory shared by the system in kilobytes. Always zero with 2.4 kernels.' Comment.Single '\n' Text '#\t print $5 > FILENAME".mem.kbbuffers.dat"; # Amount of memory used as buffers by the kernel in kilobytes.' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '6' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".mem.kbcached.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Amount of memory used to cache data by the kernel in kilobytes.' Comment.Single '\n' Text '#\t print $7 > FILENAME".mem.kbswpfree.dat"; # Amount of free swap space in kilobytes.' Comment.Single '\n' Text '#\t print $8 > FILENAME".mem.kbswpused.dat"; # Amount of used swap space in kilobytes.' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '9' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".mem.swpused.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Percentage of used swap space.' Comment.Single '\n' Text '#\t n = "";' Comment.Single '\n \t' Text '}' Punctuation '\n ' Text 'if' Keyword ' ' Text '(' Punctuation 'n' Name.Other ' ' Text '==' Operator ' ' Text '"totsck"' Literal.String.Double ')' Punctuation '\n\t' Text '{' Punctuation ' ' Text '# This is the socket info' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '2' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".sock.totsck.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Total number of used sockets.' Comment.Single '\n\t ' Text 'print' Keyword.Reserved ' ' Text '$' Operator '3' Literal.Number.Integer ' ' Text '>' Operator ' ' Text 'FILENAME' Name.Builtin '".sock.tcpsck.dat"' Literal.String.Double ';' Punctuation ' ' Text '# Number of TCP sockets currently in use.' Comment.Single '\n' Text '#\t print $4 > FILENAME".sock.udpsck.dat"; # Number of UDP sockets currently in use.' Comment.Single '\n' Text '#\t print $5 > FILENAME".sock.rawsck.dat"; # Number of RAW sockets currently in use.' Comment.Single '\n' Text '#\t print $6 > FILENAME".sock.ip-frag.dat"; # Number of IP fragments currently in use.' Comment.Single '\n' Text '#\t n = "";' Comment.Single '\n \t' Text '}' Punctuation '\n ' Text '}' Punctuation '\n' Text '}' Punctuation '\n' Text 'END' Name.Builtin ' ' Text '{' Punctuation '\n ' Text 'print' Keyword.Reserved ' ' Text '" \'"' Literal.String.Double ' ' Text 'FILENAME' Name.Builtin ' ' Text '"\' done."' Literal.String.Double ';' Punctuation '\n' Text '}' Punctuation '\n' Text