Skip to main content

Read a File line by line in Shell

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 :


#!/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

Popular posts

A few useful sql functions

Start mysql in Ubuntu without having root privilege:- If you want to use mysql in Ubutu you can use following command which will use a root level privilege   $ mysql -u root -p Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 147 Server version: 5.1.49-1ubuntu8.1-log (Ubuntu) When it demands to enter the password fill it with 'root' and hopefully you'll get logged in .   Last_insert_id():- (with no argument) returns the first automatically generated value that was set for an AUTO_INCREMENT column by the most recently executed INSERT statement to affect such a column. For example, after inserting a row that generates an AUTO_INCREMENT value, you can get the value like this:   mysql> SELECT LAST_INSERT_ID(); Database():- Database() method returns the current selected database and you can use it in your communication and your queries. The syntax is :   mysql>select Database (); User():- It a...

Nodejs SSA learnings

nodejs-akamai-page.MD Overview In almost every blog when people talk about deploying something on K8S they use node mostly because setting up http server is not that easy. I wish that it could be this easy for our case, (which it wasn’t). Manly because the way we wanted the application to work, plans for SEO and multiple data pipelines for business including Amplitude for client and Pubsub for application and business metrics. Making all these calls from nodejs was easy for developers just 1 more promise. Everything went smoothly as long as functional testing was required. We were ready to launch and somebody from SRE/Devops team asked: “Have you done load testing?” . Everything was superb up to this point where load testing results are required to make service live. Load Testing We started to put load to our services using apache benchmark. Very soon we realised our application is not scaling as much as we expected. To our surprise application was able to handle only 3 requ...

Istio multicluster, gotchas ....

istio.md Istio lets you connect, secure, control, and observe services. At a high level, Istio helps reduce the complexity of these deployments, and eases the strain on your development teams. It is a completely open source service mesh that layers transparently onto existing distributed applications. It is also a platform, including APIs that let it integrate into any logging platform, or telemetry or policy system. Istio’s diverse feature set lets you successfully, and efficiently, run a distributed microservice architecture, and provides a uniform way to secure, connect, and monitor microservices. In context of Vuclip istio allows us to reduce the code and environment configurations while keeping the similar or more feature sets at our disposal. Since istio is designed to bridge the gap for both development teams and SRE, it is essential to see and visualize that in practice. Istio will affect us in our ability to connect , secure(HTTPs TLS, mtls [Phase-2]), control(external comm...

Using except command with bash

1.Use the interpreter for bash at first line . #!/bin/bash 2. Use variables as per requirement and pass it to except if needed. HOST="localhost" USER="chitti" PASS="123" CMD=$@ 3. Use expect script as required. XYZ=$(expect -c " spawn ssh $USER@$HOST expect \"password:\" send \"$PASS\r\" expect \"\\\\$\" send \"$CMD\r\" expect -re \"$USER.*\" send \"logout\" ") 4.Print the result of except using echo like echo "${XYZ}"

Managing & Configuring YUM [Centos 6.0]

Yum Configuration Hi Friends, we all have faced problems while configuring yum in RedHat, Fedora and Centos. Please find the below mention steps to use all the RPM packages come along with your distribution. Yum configuration will allow you to use them with proper dependency resolution. To configure yum you must have two packages, 1. yum 2. createrepo To obtain the same do the below mention just after you have mounted you disk. There could be two conditions a.) You have the distribution disk i.e. DVD. Please follow the below mention instructions to manage the same. Your system mush have the greater or equal space of DVD. # df -ah User the partition which has the space and create a directory. In my case /mnt has the space. # mount /dev/dvdwriter /mnt # cd /mnt/Packages/ # rpm -ivh yum-* --nodeps –force # rpm -ivh vsftps* -y # rpm -ivh createrepo* --nodeps --force # cp -rpvf /mnt/* /var/ftp/pub It will create the dump on /var/ftp/pub now we need to unmount the disk. # umount /mnt b.)...

Enter your email address: