I want to get out put as folows:

100 HE01 {number of line in this file} {file created on time stamp}
200 LTXS {number of line in this file} {file created on time stamp} 

(if the file does not exist then it should say FILE NOT AVAILABLE

to start with I have a input file (inputfile.txt) that contains following data:

100 HE01 file1.txt
200 LTXS file2.txt

and file1.txt & file2.txt are in the current directory. there is a chance that they file may not exist.

I tried for loop, wc -l, grep, cut but the out put is not very satis factory.

Don't hesitate to give me any go-to or pointer to finding the solution. I don't expect you to do my work ;-)

Recommended Answers

All 7 Replies

#!/bin/ksh


cat inputfile.txt|while read v w x
do
if [ -e $x ]
then
num_lines=`wc -l $x|sed -e 's/ *//' -e 's/ .*$//'`
time_stamp=`ls -l $x|awk '{print $6 "_" $7 "_" $8}'`
echo "$v $w $x $num_lines $time_stamp"
fi
done

That will give you output like this (when both files exist - either one would just not do anything if they weren't there)

100 HE01 file1.txt 3 Oct_25_22:27
200 LTXS file2.txt 12 Oct_25_22:27

Hope that helps :)

, Mike

Thank you Mike,

This was perfect. This is exactly what I was looking for!

I guess I cannot thank you enough :-)

Nikhil

#!/bin/ksh

cat inputfile.txt|while read v w x
do
if [ -e $x ]
then
num_lines=`wc -l $x|sed -e 's/ *//' -e 's/ .*$//'`
time_stamp=`ls -l $x|awk '{print $6 "_" $7 "_" $8}'`
echo "$v $w $x $num_lines $time_stamp"
fi
done

no need for cat

while read ....
do
....
done < inputfile.txt

Pick your poison, I guess - cat or redirect STDIN.

Thanks for the alternative suggestion :)

, Mike

Meant to write - cat or redirect output from file. I really have to stop posting on weekend mornings ;)

Again, thanks :)

, Mike

Mike (eggi),

your suggestion is correct. I hit this bug with the cat option: http://osdir.com/ml/shells.bash.bugs/2003-03/msg00023.html

Some how if you cat and pipe then the varibales are all converted to local variables within the while loop. I had to use the redirect input to over come the issue: Here is how I did it finally:

while read v w x
do
if [ -e /usr/task/shared/$x ];
then
{       num_lines=`wc -l /usr/task/shared/$x|sed -e 's/ *//' -e 's/ .*$//'`
        time_stamp=`ls -l /usr/task/shared/$x|awk '{print $6 " " $7 " " $8}'`
        echo "$v     $w    $time_stamp     $num_lines"      >> outputfile.txt
        let total+=num_lines
}
else
{       echo "$v     $w    FILE DOES NOT EXIST"         >> outputfile.txt
}
fi
done <  /usr/task/lst_New_Leads_Camp.txt
echo "---------------------------------------------"        >> outputfile.txt
echo "            Total leads:     ${total} "           >> outputfile.txt
echo "---------------------------------------------"        >> outputfile.txt

Cool - that's good to know. I've never hit that bug, but I'll be sure not to now :)

BTW, Credit GhostDog with the suggestion to redirect, I suggested using cat, so I don't deserve the thanks - but it's the thought, or gesture, that counts :)

Take it easy :)

, Mike

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.