Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Oct 2008 22:14:08 +0100 (CET)
From:      Oliver Fromme <olli@lurza.secnetix.de>
To:        freebsd-stable@FreeBSD.ORG, dudu.meyer@gmail.com
Subject:   Re: Script-friendly (parseble) ps(1) output?
Message-ID:  <200810302114.m9ULE8jV002689@lurza.secnetix.de>
In-Reply-To: <d3ea75b30810301303y8657f65vd6165f0650ea2bb5@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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.

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

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart

FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd

"File names are infinite in length, where infinity is set to 255 characters."
        -- Peter Collinson, "The Unix File System"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200810302114.m9ULE8jV002689>