|
Extracting the correct column with "ps" and "awk"
A reader writes:
Every *nix implementation is different. But I'm seeing some some shared behavior between HPUX and Solaris with script #52 Killing Processes by Name. The problem is that the script is trying to kill the "tty" name, instead of the pid. The last line assigns the result of the shell escaped ps | awk pipe to a shell variable called "pids" (this is indicated by the $( and ) pair). Within the shell, the ps command lists all processes, with the two flags 'c' and 'u', which change the command name to be just the executable name, and display useful information too, and the '-U user' flag limits results to just the specified user (in case more than one user has processes running on the tty device). The output is expected to look like this: $ ps -cu -U taylor USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND taylor 222 4.3 -3.9 329032 81652 ?? Ss Thu08PM 108:00.19 WindowServer taylor 1760 3.3 -0.4 202792 8792 ?? R 10:09AM 0:09.09 Terminal taylor 1162 1.0 -1.2 269288 25800 ?? S Sat08AM 29:42.57 iChat taylor 714 0.4 -1.3 242220 27564 ?? S Fri08AM 23:57.56 iTunes taylor 287 0.0 -0.6 208284 13468 ?? S Thu08PM 1:53.66 Dock(this is a subset of the output) Now you can see that if we search for a specific pattern, we'll match all lines that are associated with a specific process name. This could be done with grep, but using awk is useful because we can then control which of the output fields is listed too (we only want the PID, field #2). That's what the second part of the pipe does. The problem you're seeing is that your version of Unix isn't returning the same results for the ps -cu -Uuser command. That being the case, you're probably seeing output like this: PID TTY TIME COMMAND 10361 ttyrb 0:00 sleepIn which case you'll want to change the second part of the awk statement to extract the first field not the second (since the PID is in field one now). It would look like this: pids=$(ps cu -U $user | awk "/ $1$/ { print \$1 }")Try that and see if you have better results!
Categorized:
Shell Script Programming
(Article 3732,
Written by Dave Taylor)
Tagged: Previous: Extracting Directory Names within a Shell Script Next: How do Unix / Linux "hard links" work? Subscribe!
check the output of "who". Now how will you kill all the processes by specific IP Address of a specific user. Posted by: linuxbug at December 22, 2005 7:36 AMAn interesting question. Sounds like you need two 'grep' commands in a row. Here's what "who" looks like: $ who So the first step would be to map the IP address to the tty device. Let's say I was interested in the first login... so I could do something like this: tty="$(who | grep 71.138.150.180 | head -1 | awk '{print $2}')" now I have in the 'tty' variable the device name. The next step is to simply feed that to the ps command, utilizing the "-t" flag. Well, not quite, because 'who' returns 'ttyp2", but we actually want "p2" for the "ps" command, so we'd need a slight tweak: tty="$(echo $tty | sed 's/tty//')" now we're ready: ps -t $tty The rest I'll leave as an exercise to the reader.:-) Posted by: Dave Taylor at December 22, 2005 7:48 AMI have a file that looks like 161 16385 11_15 How do I extract first two columns based on the third column (all columns with 11_15), so forth? Posted by: TJAIN at February 13, 2007 8:54 AMThat should be easy. Something like this for matchingline in $(grep "11_15" inputfile) etc. Posted by: Dave Taylor at February 13, 2007 9:20 AMI have something to say, now that you mention it, but ...
I do have a comment, now that you mention it!
|
Recommended
Recent Entries
Search
I Need Help!
Apple iPad Help
Articles and Reviews Auctions and Online Shopping Blogs and RSS Feeds Building Web Site Traffic Business and Management CGI Scripts and Web Site Programming Computer and Internet Basics d) None of the Above Facebook Help Google Plus Help HTML and CSS Industry News and Trade Shows iPhone and Cell Phone Help iPod, Sony PSP and MP3 Player Help Mac OS X Help Pay Per Click (PPC) Advertising Search Engine Optimization (SEO) Shell Script Programming Tech Support Video Help The Writing Business Twitter, LinkedIn and Social Network Help Unix and Linux Help Video Game Tips and Help Windows PC Help WordPress Help |