Maybe for a large file it might be faster with memoize. Or maybe not. Benchmark testing is left up to the user :)
#!/usr/bin/perl # http://perlmonks.org/?node_id=1138357 use strict; use warnings; $_ = <<END; PID PPID COMMAND 0 0 sched 1 0 /sbin/init 7 0 vmtasks 105 1 /usr/lib/saf/sac 7184 1 /usr/bin/java 7222 1 /usr/lib/utmpd 7501 6223 /usr/sbin/nscd 7507 7184 /bin/sh 7508 7507 /usr/bin/perl 7510 5044 /usr/bin/grep 7512 4333 /usr/bin/egrep 7515 7508 sh 7516 7515 <defunct> 8000 1 /second/example/for/testing 8001 8000 <defunct> END my (%pids, %memoize); $pids{$2} = [$3, $1] while /^(\s*(\d+)\s+(\d+).*\n)/gm; sub trace { $memoize{$_[0]} //= do { my ($ppid, $line) = @{ $pids{shift()} }; ($ppid ? trace($ppid) : "\n") . $line; } } print trace $_ for /^\s*(\d+)\s+\d+\s+<defunct>/gm;
In reply to Re: Help parsing this data
by Anonymous Monk
in thread Help parsing this data
by cspctec
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |