PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ausgabeformat von awk ändern



meinereinerseiner
03-02-2005, 09:29
hi,

ich würde gern alle PID's von einem programm fortlaufend mit komma separiert
angezeigt haben wollen.

mit:

ps -ef | grep /opt/program/program | grep -v grep | awk '{print $2}'
bekomme ich das nur zeilenweise.

hat jemand eine idee?

danke
der tom

quinte17
03-02-2005, 10:02
vielleicht klappt ja:


ps -ef | grep /opt/program/program | grep -v grep | awk '{print $2}' | sed -e 's/\n/,/g'


ist zwar nicht mit awk, aber sollte nicht so schlecht sein..

greetz

peschmae
03-02-2005, 11:28
Das geht mit setzen des ORS (Output Record Separator) der per default ein "\n" ist. Sowas:


ps -ef | grep bash | grep -v grep | awk '{ORS=","; print $2}'


das eine grep kannst du dir auch gleich einsparen:


ps -ef | grep -v grep | awk '/bash/{ORS=","; print $2}'


das zweite sicher auch irgendwie, nur weiss ich jetzt gerade nicht wie. :)

MfG Peschmä

meinereinerseiner
03-02-2005, 13:05
@quinte17
die sache mit sed geh so irgendwie nicht.

@peschmae
das ORS ist die lösung, wobei er nach der letzten PID nochmal ein komma
setzt, aber damit kann ich leben.

vielen dank
der tom

peschmae
03-02-2005, 17:23
Ja, ist mir auch aufgefallen. Ich wüsste aber nicht wie man das ab bzw. umschalten kann.

MfG Peschmä

Hans-Georg Normann
03-02-2005, 22:36
Na mit nem kleinen Script gehts doch.
# grep_filter.awk
# 03.02.2005 H. G. Normann
#
// { do_it() }

BEGIN {
secondOutput = 0
maxLength = 80
oLength = 0
}

END {
printf("\n")
}

function do_it() {

if (secondOutput != 0)
{
s = sprintf(",%d", $2)
printf(",%d", $2)
}
else
{
s = sprintf("%d",$2)
printf("%d",$2)
secondOutput = 1
}

oLength += length(s)
if (oLength > maxLength) {
printf("\n")
oLength = 0
secondOutput = 0
}
}Sind mehr als maxLength Zeichen ausgegeben, wird eine neue Zeile angefangen. Hier mal die Ausgabe mit maxLength=10
[hans@rosi my]$ ps -ef | grep bash | grep -v grep | awk -f grep_filter.awk
4571,4597,4623
4737,5007,5580Hans

Romanday
05-02-2005, 09:20
das eine grep kannst du dir auch gleich einsparen:


ps -ef | grep -v grep | awk '/bash/{ORS=","; print $2}'


das zweite sicher auch irgendwie, nur weiss ich jetzt gerade nicht wie. :)

MfG Peschmä


ps -ef | awk '$8 ~/kdeinit/ {ORS=",";print $2}'

oder etwas länger, aber schneller:

ps -ef | awk 'BEGIN{ORS=","} $8 ~/kdeinit/ {print $2}'