I've used a few techniques for this kind of reading but gets failed until I've read this fine blog .
http://www.bashguru.com/2010/05/how-to-read-file-line-by-line-in-shell.html
this helps a lot and i have developed a trick for me.
Refer to the following example to examine the script :
http://www.bashguru.com/2010/05/how-to-read-file-line-by-line-in-shell.html
this helps a lot and i have developed a trick for me.
Refer to the following example to examine the script :
#!/bin/bash
#SCRIPT: method2.sh
#PURPOSE: Process a file line by line with redirected while-read loop.
FILENAME=$1
count=0
while read LINE
do
let count++
echo "$count $LINE"
done < $FILENAME
echo -e "\nTotal $count Lines read"
I have passed the file in the end of the loop so i didn't need
to use pipe that is why i process the file in fastest manner and gives
the required output in a quick manner.
However i can use one more thing the File Descriptors.
The File Descriptors are similar to the normal file pointers however in
more analogue way.If you have used C then you will have familier with the
the default file openers in C "stdin","stdout" and "stderror"
and each of them is assigned with a file descriptor respectivly 0,1 and 2.
For opening additional files there are a few more descriptors from 3 to 9
depending on your OS. So come to the point, if you want to read your file
from standard input usually known as stdin among developers you need to
change the default input from 0 to any other descriptor like this:
exec 3<&0
it will change the defdault stdin descriptor from 0 to 3 and you need to
follow one more step to complete the task is:
exec 0<$filename
and its done. Now use the below given script to acomplish your job.
#!/bin/bash #SCRIPT: method3.sh #PURPOSE: Process a file line by line with while read LINE Using #File Descriptors FILENAME=$1 count0= exec 3<&0 exec 0< $FILENAME while read LINE do let count++ echo "$count $LINE" done exec 0<&3 echo -e "\nTotal $count Lines read"
For more information refer to the given blog and use man pages for command
information.
Comments
Post a Comment