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

Change password of mysql users

Change MySQL user's password in bulk Sometimes we need to change the password of mysql users at bulk. Lets say your company has fired a group of peoples or dissolved a project. This requirement can be supplied as : We can achieve the same by changing the password field in mysql.user table. Password() is a predifined method in mysql which generates encrypted value of a certain string. host update mysql.user set password = PASSWORD("passwd") where host IN (<Comma separated list of HostName/IP>); user update mysql.user set password = PASSWORD("passwd") where user IN (<Comma separated list of ‘user’@’host’>);

Hipchat and Icinga

Hipchat Notify 2.0 Hipchat notification with API 2.0 to be used with ICINGA/Nagios Table of Contents Table of Contents Author Audience Introduction Ruby Script Script used on server Service notification Host notification Change in command.conf for Icinga server Example notification Roadmap Author Shubhamkr619@gmail.com Audience System Engineers and operation engineers Introduction Change the default mail notification of Icinga server to hipchat notification using ruby code. This will allow a single place of management of all the notification and alerts across organization. Let that be service,host or business level alerts all can be managed and monitored using hipchat and hubot will give certain advantage over traditional alerting system. Proactive and reactive alerting Managed monitoring Single place of all the alerts Better communication and collaboration Integration with multiple tools in CI cycle Jenkins Chef ...

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...

Allowing users to have ssh access

Allowing users to have ssh access Hi Readers, It is one of the tasks we need to complete in order to allow users to log-in into your server without compromising your security. We are going to accomplish the following tasks, 1.) Allow the users for given domain only 2.) Must allow access to a given domain 3.) Block access for a specific domain. These questions are asked in RedHat certification examination RHCE6 We are going to complete the above mention task using iptables To give proper example we are taking 192.168.20.0/255.255.255.0 as our domain and 192.168.21.0/255.255.255.0 as other domain. Assuming that your system is a fresh installation we can remove all rules previously applied. # iptables -F  The above mention command will flush all the previously applied rules. Insert a rule in your input chain by below mention command, # iptables -I INPUT -s <ip of your domain>/<subnet mask> -p <protocal tcp/udp> --dport <port> -...

Add user in Sudoer file

The command sudo provides other users to run a command as a root. To use sudo user must have their level of privilege in /etc/sudoer file. In some cases this file is set for read only and others can edit that file and add their user name in Sudoer for this case such as Fedora 12 users need to provide this syntax as a root on their terminal. Syntax for adding a user in Sudoer file is: echo "username ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers And to gain the writing privilege you can use the following code in your terminal : chmod 755 /etc/sudoers This code will be enough to give permissions to the user and his user group. If you are an ubuntu user you can easily add your user in this file like: vi /etc/sudoers And you will get a text file. Afterward you need to press 'i' for edit and edit by adding your username just below "root ALL=(ALL) ALL" "username ALL=(ALL) ALL"

Enter your email address: