Convert awk statements to variables

Posted on 2008-10-07
Medium Priority
Last Modified: 2013-12-21
I am trying to read in a simple colon delimited datafile (i.e. mysql.accts), parse through it with awk to extract out the variables for the MySQL account username, password and database name.

My awk skills are a bit rusty, but when I kick off the script, I am encountering this error message:

./testme.sh: line 35: username1:mypassword1:database_name1: No such file or directory
./testme.sh: line 36: username1:mypassword1:database_name1: No such file or directory
./testme.sh: line 37: username1:mypassword1:database_name1: No such file or directory

I have attached portions of the code via snippets for reference needs.

mysql.sites datafile...
Script to read in datafile and extract variables...
# Gather info about each site (one at a time) & extract variables
for site in $(awk '{print $1}' < "$site_list" )
DBUSER=$(awk -F: '{print $1}' < "$site" )
DBPASS=$(awk -F: '{print $2}' < "$site" )
DBNAME=$(awk -F: '{print $3}' < "$site" )
echo "$DBUSER -- $DBPASS -- $DBNAME"
   let "n += 1"

Open in new window

Question by:Michael Worsham
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2

Expert Comment

ID: 22659937
It looks like you're only passing in the first collumn instead of the entire line?  Try building your site variable with collumn $0 (all collumns)
for site in $(awk '{print $0}' < "$site_list" )

Open in new window


Accepted Solution

cflong earned 2000 total points
ID: 22659995
In addition, the reason for the errors is that when you direct stdin with <, shell epects a filename.  Since you have the text in a variable, you can echo that and pipe it to awk
DBUSER=$(echo ${site} | awk -F: '{print $1}' )
DBPASS=$(echo ${site} | awk -F: '{print $2}' )
DBNAME=$(echo ${site} | awk -F: '{print $3}' )

Open in new window

LVL 14

Expert Comment

ID: 22660011
Does that meet your requirements?
while read LINE; do
  DBUSER=$(echo $LINE | awk -F: '{ print $1 }')
  DBPASS=$(echo $LINE | awk -F: '{ print $2 }')
  DBNAME=$(echo $LINE | awk -F: '{ print $3 }')
  echo $DBUSER -- $DBPASS -- $DBNAME
done < $site_list

Open in new window

LVL 29

Author Closing Comment

by:Michael Worsham
ID: 31503859
You are a god! Thanks!

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The purpose of this article is to demonstrate how we can use conditional statements using Python.
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
Suggested Courses
Course of the Month8 days, 10 hours left to enroll

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question