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}'
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.