From owner-freebsd-stable@FreeBSD.ORG Thu Oct 30 21:14:11 2008 Return-Path: Delivered-To: freebsd-stable@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 150F7106564A for ; Thu, 30 Oct 2008 21:14:11 +0000 (UTC) (envelope-from olli@lurza.secnetix.de) Received: from lurza.secnetix.de (unknown [IPv6:2a01:170:102f::2]) by mx1.freebsd.org (Postfix) with ESMTP id 80CE28FC21 for ; Thu, 30 Oct 2008 21:14:10 +0000 (UTC) (envelope-from olli@lurza.secnetix.de) Received: from lurza.secnetix.de (localhost [127.0.0.1]) by lurza.secnetix.de (8.14.3/8.14.3) with ESMTP id m9ULE8n6002690; Thu, 30 Oct 2008 22:14:08 +0100 (CET) (envelope-from oliver.fromme@secnetix.de) Received: (from olli@localhost) by lurza.secnetix.de (8.14.3/8.14.3/Submit) id m9ULE8jV002689; Thu, 30 Oct 2008 22:14:08 +0100 (CET) (envelope-from olli) Date: Thu, 30 Oct 2008 22:14:08 +0100 (CET) Message-Id: <200810302114.m9ULE8jV002689@lurza.secnetix.de> From: Oliver Fromme To: freebsd-stable@FreeBSD.ORG, dudu.meyer@gmail.com In-Reply-To: X-Newsgroups: list.freebsd-stable User-Agent: tin/1.8.3-20070201 ("Scotasay") (UNIX) (FreeBSD/6.4-PRERELEASE-20080904 (i386)) MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-2.1.2 (lurza.secnetix.de [127.0.0.1]); Thu, 30 Oct 2008 22:14:09 +0100 (CET) Cc: Subject: Re: Script-friendly (parseble) ps(1) output? X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: freebsd-stable@FreeBSD.ORG, dudu.meyer@gmail.com List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Oct 2008 21:14:11 -0000 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 "" for (i = 1; i <= numfields; i++) { content = substr($0, fstart[i], fwidth[i]) print " " content "" } print "" } }' Of course that's just an example. You still have to produce "" 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"