help with perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting help with perl
# 1  
Old 03-31-2008
help with perl

hi
i am trying to write a perl script which will run in cron job and with the help of top command generate a log file of processes talking more cpu , running from long time , not associated with terminal and few other rules now i have modified top output as follows :
Code:
USERNAME      PID      TTY  TIME     WCPU  CPU           COMMAND
fnsonld8           375       ?  1311:02  99.89   99.71         rtsora
fnsonld7         19036       ?  1184:04  99.72   99.54         rtsora
fnsonld9         14489       ?  1241:52  99.70   99.53         rtsora
 fnsonlg          9815  pts/24  2495:00  98.86   98.69         rtsora
    root            54       ?   399:37   1.30    1.29          vxfsd
    root          1763       ?     1:55   0.43    0.43            rds
    root          1990       ?    18:00   0.28    0.28          vxsvc
    root          1380       ?    53:56   0.25    0.25      sendmail:
    root            38       ?    20:42   0.15    0.15       schedcpu
    root            19       ?     5:21   0.14    0.14 ksyncer_daemon
    root          1501       ?     0:03   0.12    0.12           rpcd

i am want to create structure with hash as follows :
Code:
USERNAME --- PID --- COMMAND
                              |_  CPU
                              |_  TIME
                              |_  TTY

Code:
 
fnsonld8--- 375 --- rtsora
                      |_ 99.71
                      |_ 1311.02
                      |_ ?

root--- 54 --- vxfcd
      |       |_  1.29
      |       |_ 399.37
      |       |_ ?
      |
      |_ 1763 --- rds
                 |_  0.43
                 |_  1.55
                 |_ pts/24
and so on

i am using hash to store data if there are more than entries per user them i am only managing to get last one as well as i am not able to display the way i displayed above ...

i will post my code 2row when i go to office ...even hints will do
# 2  
Old 03-31-2008
You need a more complex data structure. Maybe a hash of hashes of arrays. See if this link helps you sort that issue out:

perldsc - perldoc.perl.org
# 3  
Old 03-31-2008
Sometimes I find it easier to combine information instead of creating a really complex table structure...(complex structures slow things down fast and I tend to loose my place in the hash). So, instead you could simplify the data...the first key would be fnsonld8_375 and then you could create multiple dimensions from there...but at least that reduces everything by 1 dimensions. When you search the keys you will have to use a pattern match. And you could further reduce dimensions by keeping the last set of values as a list. So your first key would be fnsonld8_375 followed by rtsora and the value would be a string containing "99.71, 1311.02, ?"...that's 3D which isn't difficult to deal with at all. Hope that helps.
# 4  
Old 03-31-2008
The structure he wants is 3D. (key/key/array) I see nothing difficut or complex here.
I recommend he uses a complex data structure, the advantages in the long run are tremendous. Very easy to code:

Code:
use Data::Dumper;
my %HoHoA = ();
<DATA>; #skip header;
while (<DATA>) {
    my ($user,$pid,$com,$cpu,$time,$tty) = (split)[0,1,6,5,3,2];
    push @{ $HoHoA{$user}{$pid}{$com} }, [$cpu,$time,$tty];
}
print Dumper \%HoHoA;
__DATA__
USERNAME      PID      TTY  TIME     WCPU  CPU           COMMAND
fnsonld8           375       ?  1311:02  99.89   99.71         rtsora
fnsonld7         19036       ?  1184:04  99.72   99.54         rtsora
fnsonld9         14489       ?  1241:52  99.70   99.53         rtsora
 fnsonlg          9815  pts/24  2495:00  98.86   98.69         rtsora
    root            54       ?   399:37   1.30    1.29          vxfsd
    root          1763       ?     1:55   0.43    0.43            rds
    root          1990       ?    18:00   0.28    0.28          vxsvc
    root          1380       ?    53:56   0.25    0.25      sendmail:
    root            38       ?    20:42   0.15    0.15       schedcpu
    root            19       ?     5:21   0.14    0.14 ksyncer_daemon
    root          1501       ?     0:03   0.12    0.12           rpcd

Edit: actually the structure is 4D. My bad. key/key/key/array. But the differnce between 3D and 4D seems fairly trivial here, especially since the first 3D's are just hash keys used to combine the cpu/time/tty data in seperate sets of data.

Last edited by KevinADC; 03-31-2008 at 05:37 PM..
# 5  
Old 04-01-2008
Quote:
Originally Posted by vincaStar
Sometimes I find it easier to combine information instead of creating a really complex table structure...(complex structures slow things down fast and I tend to loose my place in the hash). So, instead you could simplify the data...the first key would be fnsonld8_375 and then you could create multiple dimensions from there...but at least that reduces everything by 1 dimensions. When you search the keys you will have to use a pattern match. And you could further reduce dimensions by keeping the last set of values as a list. So your first key would be fnsonld8_375 followed by rtsora and the value would be a string containing "99.71, 1311.02, ?"...that's 3D which isn't difficult to deal with at all. Hope that helps.

thanx for the advice ... ya it looks easy and simple too ...
i had created hash of hashes before but this one is pretty complex ...

thanx everyone for their suggestions
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Programming

Perl: restrict perl from automaticaly creating a hash branches on check

My issue is that the perl script (as I have done it so far) created empty branches when I try to check some branches on existence. I am using multydimentional hashes: found it as the best way for information that I need to handle. Saing multidimentional I means hash of hashes ... So, I have ... (2 Replies)
Discussion started by: alex_5161
2 Replies

3. Shell Programming and Scripting

Perl :: reading values from Data Dumper reference in Perl

Hi all, I have written a perl code and stored the data into Data structure using Data::Dumper module. But not sure how to retreive the data from the Data::Dumper. Eg. Based on the key value( Here CRYPTO-6-IKMP_MODE_FAILURE I should be able to access the internal hash elements(keys) ... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. UNIX for Advanced & Expert Users

perl and HP-UX : instmodsh in combination with software depot : update inventory for installed Perl

we create a HP-UX software depot with a new perl-modul. after installation of the software depot, the perl module i can't find with instmodsh in the inventory for installed Perl modules. - i have learned of using instmodsh command : i find out what modules are already installed on my system. ... (0 Replies)
Discussion started by: bora99
0 Replies

5. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

6. Shell Programming and Scripting

Hidden Characters in Regular Expression Matching Perl - Perl Newbie

I am completely new to perl programming. My father is helping me learn said programming language. However, I am stuck on one of the assignments he has given me, and I can't find very much help with it via google, either because I have a tiny attention span, or because I can be very very dense. ... (4 Replies)
Discussion started by: kittyluva2
4 Replies

7. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

8. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

9. Shell Programming and Scripting

Passing date formats in Perl: i.e. Jul/10/2007 -> 20070710 (yyyymmdd) - Perl

Hi , This script working for fine if pass script-name.sh Jul/10/2007 ,I want to pass 20070710(yyyymmdd) .Please any help it should be appereciated. use Time::Local; my $d = $ARGV; my $t = $ARGV; my $m = ""; @d = split /\//, $d; @t = split /:/, $t; if ( $d eq "Jan" ) { $m = 0 }... (7 Replies)
Discussion started by: akil
7 Replies

10. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies
Login or Register to Ask a Question