Using variable inside awk

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using variable inside awk
# 1  
Old 08-23-2011
Using variable inside awk


Please help me how to use variables inside awk in code below:

ll | awk -v "yr=`date '+%Y'`" -v "mnth=`date '+%m'`" -v Jan=1 -v Feb=2 -v Mar=3 -v Apr=4 -v May=5 -v Jun=6 -v Jul=7 -v Aug=8 ' !/^d/ { if(NR>1) {printf "%-29s\t\t%s\t%5s\t\t%s %s,", $9,$1,$5,$`$6`,$7} }'

# 2  
Old 08-23-2011
You already appear to be doing so, but not doing anything with the variables you set. What are you actually trying to do?
# 3  
Old 08-23-2011
Manubatham, per the awk man page, the variables that you supply with the -v arg, are available in the BEGIN section only:
-v var=val
--assign var=val
Assign the value val to the variable var, before execution of
the program begins. Such variable values are available to the
BEGIN block of an AWK program.
Here is how you can use it:
awk -v "Jan=1" 'BEGIN { print Jan }'

This will produce the output - 1, which is the value of the variable Jan.
# 4  
Old 08-23-2011
Hi Corona,

Here you can see that $6 will return the month... that will be in format of Jan, Feb, Mar, or ... Now I want to convert month to numeric. Like 1 for Jan, 2 for Feb, 3 for on.

# 5  
Old 08-23-2011
passing -v Jan=1 makes the variable named Jan contain "1". You don't get the string "Jan" anywhere.

How about:

awk 'BEGIN { split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec", MON, "|"); }
{ (rest of your code goes here) }'

That gives you an array MON where MON[1] gets you "Jan", MON[2] gets you "Feb", MON[$6] gets you the name of whatever number $6 is, and so forth.

[edit] Got it backwards. Hmm, thinking on it.
# 6  
Old 08-23-2011
Am I using $Aug in correct way?

ll | awk -v "yr=`date '+%Y'`" -v "mnth=`date '+%m'`" -v Jan=1 -v Feb=2 -v Mar=3 -v Apr=4 -v May=5 -v Jun=6 -v Jul=7 -v Aug=8 ' !/^d/ { if(NR>1) {printf "%-29s\t\t%s\t%5s\t\t%s %s\n", $9,$1,$5,$Aug,$7} }'

# 7  
Old 08-23-2011
awk 'BEGIN { split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec", MON, "|"); for(N=1; N<=12; N++) I[MON[N]]=N; }
{ (rest of your code goes here) }'

Now you have an array MON where MON[1]="Jan", and an array I where I["Jan"]=1.

---------- Post updated at 12:11 PM ---------- Previous update was at 12:10 PM ----------

Originally Posted by manubatham20
Am I using $Aug in correct way?
You've already been told "no". $Aug will pick a different field depending on what number Aug is. Variables don't work that way in awk. print Aug; will print 8. Print $Aug will print field number 8, whatever it is. I don't think you can solve your problem with -v since you can't go from a number to a variable name.

You can use a number as an array index, which is what I have done. Try my above solution, which builds arrays out of a string of months.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Variable and awk inside for loop

Thanks all for taking time out and reading this thread and big Thanks to all who have come forward for rescue. Background: I have a variable "nbrofcols" that has number of columns from a data file. Now, using this count in for loop, I am trying to get the maximum length of each column present... (7 Replies)
Discussion started by: svks1985
7 Replies

2. Shell Programming and Scripting

Variable assignment inside awk

Hi, Was hoping someone could help with the following: while read line; do pntadm -P $line | awk '{if (( $2 == 00 && $1 != 00 ) || ( $2 == 04 )) print $3,$5}'; done < /tmp/subnet_list Anyone know if it is possible to assign $3 and $5 to separate variables within the {} brackets? Thanks... (14 Replies)
Discussion started by: CiCa
14 Replies

3. Shell Programming and Scripting

Passing awk variable argument to a script which is being called inside awk

consider the script below sh /opt/hqe/hqapi1-client-5.0.0/bin/ alert list --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true >/tmp/alerts.xml awk -F'' '{for(i=1;i<=NF;i++){ if($i=="Alert id") { if(id!="") if(dt!=""){ cmd="sh (2 Replies)
Discussion started by: vivek d r
2 Replies

4. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

5. Shell Programming and Scripting

Problem using variable inside awk

HI, This is the code I am using: awk -v aaa="connect" 'BEGIN {IGNORECASE} /aaa/,/!/ {print NR}' bb This does not throw any error but it does not work. Pls help Thanks. (4 Replies)
Discussion started by: sudvishw
4 Replies

6. Shell Programming and Scripting

Variable inside AWK printf

Hi, Is it possible to print a variable inside awk printf ?? the above is not working (13 Replies)
Discussion started by: selvankj
13 Replies

7. Shell Programming and Scripting

How to use same variable value inside as well as outside of the awk command?

Hi Jim, The following script is in working state. But i m having one more problem with awk cmd. Could you tell me how to use any variable inside awk or how to take any variable value outside awk. My problem is i want to maintain one property file in which i am declaring variable value into that... (12 Replies)
Discussion started by: Ganesh Khandare
12 Replies

8. Shell Programming and Scripting

Using variable inside awk

I am trying to print the lines with pattern and my pattern is set to a variable express awk '/$express/{where=NR;print}' test2.log I am not getting any data even though i have the data with the pattern. Can seomeone correct me with the awk command above? (20 Replies)
Discussion started by: rdhanek
20 Replies

9. Shell Programming and Scripting

getting variable inside awk

Hi All, I have awk script for replacing the nth ocurance of a string in an xml file... My code is like this FILETYPE=xml TAGNAME=type OCCURANCE=$1 TAGVALUE=valueur echo OCCURANCE:$OCCURANCE echo TAGNAME:$TAGNAME echo TAGVALUE:$TAGVALUE awk -v n=$OCCURANCE -v... (1 Reply)
Discussion started by: subin_bala
1 Replies

10. Shell Programming and Scripting

variable inside awk '{print $c}'

i'm trying to do this (in bash darwin); echo "give me some words: " read a c=2 # this is get by other ways echo $a | awk '{print $c}' # i want to print the column given # by de $c variable if there is someone understand what i pretend... (3 Replies)
Discussion started by: Tártaro
3 Replies
Login or Register to Ask a Question