Script-friendly (parseble) ps(1) output?
Eduardo Meyer
dudu.meyer at gmail.com
Thu Oct 30 14:40:43 PDT 2008
On Thu, Oct 30, 2008 at 7:14 PM, Oliver Fromme <olli at lurza.secnetix.de> wrote:
> Eduardo Meyer wrote:
> > Oliver Fromme wrote:
> > > Eduardo Meyer wrote:
> > > > I need to write a cgi script which will print the output from ps(1) in
> > > > a table (html), so the average-operator can click on a KILL link and
> >
> > Thank you all. I didnt mention the language, yes, I wanted it with
> > shell script. Sadly, no idea was completly enough, for the default ps
> > output it simple has no pattern. No multiple-pattern would do the job
> > safely.
>
> Did you actually read my suggestion? I explained that you
> cannot cut by pattern, but that you need to cut on field
> widths according to the header line.
Yes, sure I did. This is why I replied agreeing with you. However, it
was not enough, I had to format the header so I was sure the pattern
would not fail.
>
> Here's a solution that implements that, using awk to do
> the parsing:
>
> #!/bin/sh -
>
> ps -axww -o pid -o user -o emul -o lstart -o lockname -o stat -o command |
> awk '{
> if (NR == 1) {
> # Parse header line.
> # Build arrays fstart[] and fwidth[].
> numfields = split(" " $0, field, / [^ ]/) - 1
> fwidth[1] = length(field[1] field[2]) + 2
> fstart[1] = 1
> for (i = 2; i <= numfields; i++) {
> fwidth[i] = length(field[i + 1]) + 2
> fstart[i] = fstart[i - 1] + fwidth[i - 1]
> }
> fwidth[numfields] = 100
> }
> else {
> # Parse data line.
> print "<tr>"
> for (i = 1; i <= numfields; i++) {
> content = substr($0, fstart[i], fwidth[i])
> print " <td>" content "</td>"
> }
> print "</tr>"
> }
> }'
>
> Of course that's just an example. You still have to
> produce "<table>" and other surrounding HTML, of course.
>
> Best regards
> Oliver
Thank you :) I will use it as a template.
--
===========
Eduardo Meyer
pessoal: dudu.meyer at gmail.com
profissional: ddm.farmaciap at saude.gov.br
More information about the freebsd-stable
mailing list