Passing awk variables to shell


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Passing awk variables to shell
# 1  
Old 02-29-2012
Passing awk variables to shell

Hi.
I need to parse file and assign some values to variables, right now i do like below
Code:
MYHOMEDIR=`awk '/Home/ {print $NF}' output.txt`
MYSHELL=`awk '/Shell/ {print $NF}' output.txt`
PRGRP=`awk '/Primary/ {print $NF}' output.txt`
SECGRP=`awk '/Second/ {print $NF}' output.txt`

In this case, AFAIK, output.txt is being opened 4 times. This is not good, because output.txt could be quite large. I beleive this can be done in one query. Pls assist.
# 2  
Old 02-29-2012
Save below code as 'var.sh' and chmod 755 var.sh
Code:
#! /bin/sh
awk '
  /Home/    { v="MYHOMEDIR";printf("%s=%s;export %s\n",v,$NF,v) }
  /Shell/   { v="MYSHELL";printf("%s=%s;export %s\n",v,$NF,v) }
  /Primary/ { v="PRGRP";printf("%s=%s;export %s\n",v,$NF,v) }
  /Second/  { v="SECGP";printf("%s=%s;export %s\n",v,$NF,v) }
' output.txt

You need to get the shell to do two parses before execution using 'eval'
Code:
eval `./var.sh`

# 3  
Old 02-29-2012
I have assigned first column as the variable name ..
Code:
$ awk '/(Home|Shell|Primary|Second)/ {print $1"="$NF}' infile > infile1

$ chmod 755 infile1

$ . ./infile1
 
$ echo $Home $Shell $Primary $Second
2 3 4 6

This User Gave Thanks to jayan_jay For This Post:
# 4  
Old 02-29-2012
Another way ....
Code:
set $(awk '/Home/ { home=$NF }
     /Shell/ { shell=$NF }
     /Primary/ { primary=$NF }
     /Second/ { second=$NF }
     END { print home, shell, primary, second }' infile)

MYHOMEDIR=$1; MYSHELL=$2; PRGRP=$3; SECGRP=$4;

echo $MYHOMEDIR
echo $MYSHELL
echo $PRGRP
echo $SECGRP

# 5  
Old 02-29-2012
Cool, but it is not working if i use ":" as filed separator and values with spaces. How to resolve this?
# 6  
Old 02-29-2012
Provide some input file contents and expected output ..
# 7  
Old 02-29-2012
Input file:
Code:
    Account Owner     : me
        Description       : me myself
        Login               : mylogin
        ID                   : 43303993
        Application       : test
        UID Number        : 3017256
        Password          : (encrypted)ololo
        Primary Group     : (451) testunix
        Secondary Group   : dialer wheel webgroup
        Home Directory    : /home/me
        Login Shell       : /usr/bin/ksh

I want to assign to variables value of fields "Primary Group" "Secondary Group" "Home Directory" "Login Shell". "Secondary Group" value could contain spaces
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Awk: passing shell variables through and extracting text

Hello, new to the forums and to awk. Glad to be here. :o I want to pass two shell (#!/bin/sh) variables through to awk and use them. They will determine where to start and stop text extraction. The code with the variables hard-coded in awk works fine; the same code, but with the shell... (7 Replies)
Discussion started by: bedtime
7 Replies

2. Shell Programming and Scripting

Passing awk variables to bash variables

Trying to do so echo "111:222:333" |awk -F: '{system("export TESTO=" $2)}'But it doesn't work (2 Replies)
Discussion started by: urello
2 Replies

3. UNIX for Dummies Questions & Answers

Passing Global Shell variables to awk

Hi All, Iam trying to pass global shell variables and is not working Main script is like below CYEAR=`date +"%y"` CFYEAR=`date +"%Y"` CMONTH=`date +"%m"` if then PMONTH=12 PYEAR=`expr $CYEAR - 1` PFYEAR=`expr $CFYEAR - 1` else PMONTH=`expr... (6 Replies)
Discussion started by: baanprog
6 Replies

4. Shell Programming and Scripting

Passing variables into AWK

I'm trying to use awk to write new entries to a hosts file if they don't exist. I need to do so depending on the type of system I have. Below is what I have, but it isn't working. awk -v myip1=$IP1 myip2=$IP2 myhost1=$HOST1 myhost2=$HOST2' BEGIN { mqhost1=0; mqhost2=0; stap1=0; stap2=0; } ... (4 Replies)
Discussion started by: Boomn4x4
4 Replies

5. Shell Programming and Scripting

ksh passing to awk multiple dyanamic variables awk -v

Using ksh to call a function which has awk script embedded. It parses a long two element list file, filled with text numbers (I want column 2, beginning no sooner than line 45, that's the only known thing) . It's unknown where to start or end the data collection, dynamic variables will be used. ... (1 Reply)
Discussion started by: highnthemnts
1 Replies

6. UNIX for Dummies Questions & Answers

Passing Shell Variables to an awk command

Hello, I have two files File1 & File2. File1 76 135 136 200 250 345 .... File2 1 24 1 35 1 36 1 72 .... I want to get all the values form File2 corresponding to the range in File 1 and feed it to a program. Is the code below right? Can I pass shell variables to awk in this... (2 Replies)
Discussion started by: Gussifinknottle
2 Replies

7. Shell Programming and Scripting

Passing awk Variables

I am trying to pass the results from a variable gathered from awk, however when I echo the 'PARSE' and 'SUB', the response is blank. This is my command. awk -F= '/Unit/''{ PARSE=substr($2,1,5) ; SUB=substr($2,1,1) }' inputfile.lst Is this a kind of valid attempt or am I obligated to declare... (3 Replies)
Discussion started by: gozer13
3 Replies

8. Shell Programming and Scripting

Passing Variables to Awk

Hi I have a unix shell script with an awk statement. I would like to print some of the fields of an input file. However, I would like to print them dynamically, ie by passing the literal $1 $3 into the script to define the output. I have tried the following: variable1='$1' awk... (2 Replies)
Discussion started by: Bab00shka
2 Replies

9. Shell Programming and Scripting

Passing shell variables to awk program..

Hello, Can we pass shell variables like $PATH etc. to a awk program part for example, awk ' { fieldValue=$PATH .... }' file (1 Reply)
Discussion started by: Vishnu
1 Replies

10. Shell Programming and Scripting

Passing Variables to AWK

Does anybody have an explanation for the following: The following scripts runs fine on IRIX64 6.5 but has bugs on Solaris 8. #! /bin/sh echo run only on an SGI machine echo type in linenumber read j echo value read value awk -f rmspass2 level=$value $j'step1.mlf' When the script is... (5 Replies)
Discussion started by: AreaMan
5 Replies
Login or Register to Ask a Question