UNIX ksh - To print the PID number and repeat count


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
UNIX ksh - To print the PID number and repeat count

This question is asked in an interview today that I have to return output with each PID number and the count of each PID number logged today. Here is the script that I have written. Can you confirm if that would work or not. The interviewer didn't said if my answer is correct or not. Can someone review this for me. They want me to print each unique PID:number and its count with tab space like PID:5674 10

Log file abc.log

Code:
PID:6543 ……    
…………………
PID:4325 ……
……………………
PID:6543 ……


Log file xyz.log

Code:
PID:8888 ……
…………………
PID:9992 ……
……………………
PID:6543 ……

Note: The PID numbers can repeat in a file. And also one PID number can appear in multiple log files.

— If today’s and previous day’s log files are in same folder

Code:
#!/bin/ksh

cd /A/B/ 
for a in `ls -lrt | grep "Mar 24" | awk '{print $9}'`;    — list of files generated today
do 
grep "^PID:" $a | cut -d " " f1  >> /tmp/abc.log   — saving first column which look like PID:23456 
done

for b in `cat /tmp/abc.log | sort -u`;
do
x=grep $b /tmp/abc.log | grep -v grep | wc;
echo $b"    "$x    — will print like PID:23456  10(count)
done


— If today’s log files are in different folder
Code:
#!/bin/ksh

cd /A/B/
for a in `ls /A/B/*.log`
do
grep "^PID:" $a | cut -d " " f1 >> /tmp/abc.log
done

for b in `cat /tmp/abc.log | sort -u`;
do
x=grep $b /tmp/abc.log | grep -v grep | wc;
echo $b"    "$x
done


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by RudiC; 03-24-2018 at 06:29 AM.. Reason: Added CODE tags.
# 2  
Now - what would be YOUR OWN results running your scripts (which BTW don't really differ except for the ls targets and the date selection)?

I immediately can see two syntax and one semantical errors, and several opportunities for improvements / optimisation. With the errors removed, the scripts should deliver what was requested.

Last edited by RudiC; 03-24-2018 at 06:58 AM..
# 3  
Hi RudiC,

I don't have unix terminal at the moment so I have not tested it, I can do that on Monday when I reach home. I was curious to know if what I my scripts would work. Can you identify the errors you can see ( is that ; after the for statement in first for loop)
# 4  
I - and not me alone - would usually recommend to try to find errors or opportunities oneself to
- experience a good learning step.
- become a real IT person (programmer, admin, whatever).

So - how about you check on Monday, and if you don't get it running, you come back to get help? And, it's NOT the ; as this is not necessary on a line break.

You posting the corrected versions here would also be appreciated.
# 6  
Here is an improved version of your script.
Code:
#!/bin/ksh

cd /A/B/ || exit    # exit if failed
for a in `ls -lrt | awk '/ Mar 24 / {print $9}'`    # list of files generated today
do 
  grep "^PID:" "$a" | cut -d " " f1   # print first column which look like PID:23456
done > /tmp/abc.log   # all output in the for-do-done block goes here

# for each unique PID ...
for b in `sort -u < /tmp/abc.log`   # cat file |  is overhead compared to  < file
do
  x=`fgrep -xc "$b" /tmp/abc.log`    # whole line match! And grep can count
  echo "$b    $x"    # will print like PID:23456  10(count)
done

In principal a $var in a command argument sould be in quotes, like "$var", otherwise the shell tries to expand it (word splitting, globbing).
This is standard shell code. If you know awk and its hashed arrays, then a smart all-in-awk solution comes in sight...

Last edited by MadeInGermany; 05-17-2018 at 01:47 PM..
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
UNIX - command to count number of files in subdirectories
ravikirankethe
I have a folder named test/ and under that I have multiple directories and in each of the directory I have multiple log files. I want to know how many files exists under each sub directory. test |--quanrantine |--logfile1 |--logfile2 |--spooling |--logfile1 ...... UNIX for Dummies Questions & Answers
4
UNIX for Dummies Questions & Answers
Count and print the number of occurences
arch
I have some files as shown below GLL ALM 654-656 654 656 SEM LYG 655-657 655 657 SEM LYG 655-657 655 657 ALM LEG 656-658 656 658 ALM LEG 656-658 656 658 ALM LEG 656-658 656 658 LEG LEG 658-660 658 660 LEG LEG 658-660 658 660 The value of GLL is...... Shell Programming and Scripting
5
Shell Programming and Scripting
count number of entries perl program or Unix script
manigrover
Hi I have a file with number of entries name 1 123 name 1 345 name 1 65346 name2 3243 name2 24234 name 2 234234 so on ......... how to count total number of entries for name 1 and name2...and so on Please guide.... Shell Programming and Scripting
1
Shell Programming and Scripting
Help with Unix and Awk to count number of occurrences
INHF
Hi, I have a file (movies.sh), this file contains list of movies such as I want to redirect the movies from movies.sh to file_to_process to allow me process the file with out losing anything. I have tried Movies.sh >> file_to_process But I want to add the row number to the data...... Shell Programming and Scripting
2
Shell Programming and Scripting
Unix command to count the number of files with specific characters in name
murphysm
Hey all, I'm looking for a command that will search a directory (and all subdirectories) and give me a file count for the number of files that contain specific characters within its filename. e.g. I want to find the number of files that contain "-a.jpg" in their name. All the searching I've...... UNIX for Dummies Questions & Answers
6
UNIX for Dummies Questions & Answers