AWK -> getting "global" vars


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK -> getting "global" vars
# 1  
Old 05-26-2006
AWK -> getting "global" vars

Hello,

presently, I'm calling nawk from my main script and have nawk defined in one file. So I call nawk like this
nawk -f file input

This file defines how to separate mails in /var/mail/$user and show 1 at a time. However, I would also like to do other actions (delete message, forward message, etc), but I don't want to do separately. I mean to create a new "nawk" file just for forwarding... .

The thing I would like is to pass a variable into this nawk file so I can decide what to do (print, forward, delete) and have it in one place. But the problem is I have no clue how to pass info and get it in nawk file.

I hope there is someone with a clue.

Thx.

Peto
# 2  
Old 05-26-2006
nawk -v action='print' -f file.awk input.txt

file.awk:
Code:
BEGIN {
   # if no action is specified on the command line - default to "print"
   if (action == "")
     action="print"
}
{
   if ( action == "print" )
       doPrint
   if ( action == "forward" )
      doForwarding
   if ( action == "whatever" )
      doWhatever   
}


Last edited by vgersh99; 05-26-2006 at 01:55 PM..
# 3  
Old 05-26-2006
Exactly what I wanted...Smilie

Thanks a lot...

Peto
# 4  
Old 05-26-2006
Is it possible to get a value from NAWK?
so I can print every message and let user choose which mail to delete and after that I would get which mail he chose and after that I would call nawk again with action=delete mail=value...
# 5  
Old 05-26-2006
Quote:
Originally Posted by petoSVK
Is it possible to get a value from NAWK?
so I can print every message and let user choose which mail to delete and after that I would get which mail he chose and after that I would call nawk again with action=delete mail=value...
Code:
#!/bin/ksh
eval $(nawk -v action='choose' -f file.awk input.txt)
echo "ChosenRecord->[${chosenRecord}]"

file.awk:
Code:
BEGIN {
   # if no action is specified on the command line - default to "print"
   if (action == "")
     action="print"
}

function doChoose()
{
   # here we're doing the "choosing" - Once a record is chosen...
    printf("chosenRec=%d\n", numberOfChosenRecord);
}
{

   if ( action == "choose" )
       doChose

   if ( action == "print" )
       doPrint
   if ( action == "forward" )
      doForwarding
   if ( action == "whatever" )
      doWhatever   
}

# 6  
Old 05-27-2006
When I write
eval $( nawk -f forward.awk /var/mail/$USER )
it wants more input so I have to end it with double ^D .

Also I'm not sure if I understand it correctly. What does eval do in this example? Does it return value which was returned from nawk? so I can get it by using $? .
How nawk return a value? : return 55 ?

Is it possible to use "global variables" that I can modify also in nawk and have it changed in parent script.
# 7  
Old 05-27-2006
what shell are you using?

try:
eval `nawk -f forward.awk /var/mail/${USER}`

for the rest of the questions (if it's the ksh you're using):
'man ksh'.

And 'no' - you cannot modify parent vars from the child process - at least not directly from 'awk' to shell - that's the whole point of using 'eval'.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

3. Post Here to Contact Site Administrators and Moderators

Suggestion: adding two new groups "sed" and "awk"

Majority of the questions are pertaining file/string parsing w.r.t sed or awk It would be nice to have these two as their own sub category under shell-programming-scripting which can avoid lot of duplicate posts. (1 Reply)
Discussion started by: jville
1 Replies

4. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

5. UNIX for Dummies Questions & Answers

How to Export Glance "Global System Calls" data to a file

Hello... I'm trying to setup a cronjob to record system data using glance at certain times of the day. My question is, how would one export the "Global System Calls" information to a file? Below is the command I have been using and it works to export CPU information. glance -f ... (0 Replies)
Discussion started by: fumus
0 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

Simplify Bash Script Using "sed" Or "awk"

Input file: 2 aux003.net3.com error12 6 awn0117.net1.com error13 84 aux008 error14 29 aux001.ha.ux.isd.com error12 209 aux002.vm.ux.isd.com error34 21 alx0027.vm.net2.com error12 227 dux001.net5.com error123 22 us008.dot.net2.com error121 13 us009.net2.com error129Expected Output: 2... (4 Replies)
Discussion started by: sQew
4 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. Shell Programming and Scripting

help for saving vertical datas to horizontal with "awk" or "cut"

hi, i have a file having datas like that ./a.txt 12344 12345 12346 12347 ..... ..... ... i want to save this datas to another file like that ./b.txt 12344 12345 12346 12347 ... ... ... i think awk can make this but how? :) waiting for ur help. (3 Replies)
Discussion started by: mercury
3 Replies

10. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question