Shell Script - awk, begin, for and print

 
Thread Tools Search this Thread
Operating Systems Linux Fedora Shell Script - awk, begin, for and print
# 1  
Old 08-30-2013
Shell Script - awk, begin, for and print

Code:
pointsb=`awk -v a2="$a2" -v b2="$b2" -v c2="$c2" -v yb="$yb" -v yc="$yc" \
	'BEGIN { for (y=yc; y<=yb; y++) { x = a2*y*y+b2*y+c2; print x, y }; }'`

I am learning shell script. I was reading a script and got confused in this line.
I understood that awk is allowing to assign the variable.

But I don't know how this line working.
Can anyone explain it, please?
# 2  
Old 08-30-2013
The BEGIN section is a section of code awk reads before it reads any files.

It is not running shell code, which is why it looks so different, it's running awk code, it's its own language.

Code:
for (y=yc; y<=yb; y++) { x = a2*y*y+b2*y+c2; print x, y };

If yc=0 and yb=4, it loops 5 times, with y=0, y=1, y=2, y=3, y=4, y=5, following the mathematical formula given to calculate new results for x, then prints the coordinates.
# 3  
Old 08-30-2013
What is the job print x,y here?

and assuming that x becomes 25 at the end of the loop, what will be the value of pointsb
# 4  
Old 08-30-2013
pointsb will hold all the x-y coordinates of this inverse parabola, as printed out by print x,y, separated by <newline> chars.
# 5  
Old 08-31-2013
Code:
pointsb=`awk -v a2="$a2" -v b2="$b2" -v c2="$c2" -v yb="$yb" -v yc="$yc" \
	'BEGIN { for (y=yc; y<=yb; y++) { x = a2*y*y+b2*y+c2; print x, y }; }'`

can write it like this?
Code:
pointsb = ""
for (y=yc; y<=yb; y++) { 
    x = a2*y*y+b2*y+c2; 
    pointsb = "$pointsb $x $y "
}

# 6  
Old 08-31-2013
No - your mixing up shell and awk, a program.
pointsb is a shell variable. The `...` is the old, deprecated form of command substitution. awk is the program being called, the -v...s are awk-variable-definitions used to transfer shell variables to awk variables, the literal string '...' is an awk script, and finally the awk output is being assigned to pointsb.
# 7  
Old 08-31-2013
Quote:
Originally Posted by RudiC
No - your mixing up shell and awk, a program.
pointsb is a shell variable. The `...` is the old, deprecated form of command substitution. awk is the program being called, the -v...s are awk-variable-definitions used to transfer shell variables to awk variables, the literal string '...' is an awk script, and finally the awk output is being assigned to pointsb.
Is it not possible to write the line of code without awk then?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need awk or Shell script to compare Column-1 of two different CSV files and print if column-1 matche

Example: I have files in below format file 1: zxc,133,joe@example.com cst,222,xyz@example1.com File 2 Contains: hxd hcd jws zxc cst File 1 has 50000 lines and file 2 has around 30000 lines : Expected Output has to be : hxd hcd jws (5 Replies)
Discussion started by: TestPractice
5 Replies

2. Shell Programming and Scripting

Usage of a variable in awk BEGIN

Hi, diffcount=`awk 'BEGIN { while ( getline < "/scripts/matt/text.server1.reference" ) { arr++ } } { if (!( $0 in arr ) ) { print } }' $TMPDIR/$(basename $0 .sh) | wc -l` if ]; then OK="OK - No change in the interfaces status" elif ]; then DIFF=`awk 'BEGIN {... (4 Replies)
Discussion started by: nms
4 Replies

3. Shell Programming and Scripting

Awk: BEGIN: prints nothing

My code fails to do anything if I've BEGIN block in it: Run the awk script as: awk -f ~/bin/sum_dupli_gene.awk make_gene_probe.txt #!/usr/bin/awk -f BEGIN { print ARGV #--loads of stuff } END{ #more stuff } (14 Replies)
Discussion started by: genome
14 Replies

4. UNIX for Dummies Questions & Answers

awk search with begin

Hi, I have written below script to begin if the line has n #!/bin/ksh /usr/xpg4/bin/awk {/ n / 'BEGIN {X = "01"; X = "02"; X = "03"; X = "04"; X = "05"; X = "06"; X = "07"; X = "08"; X ="09"; X = "10"; X = "11"; X = "12"; };} NR > 1 {print $1 "\t" $5 "," X "," $6 " " $7}'} input.txt |... (9 Replies)
Discussion started by: stew
9 Replies

5. Shell Programming and Scripting

How to print backslash in shell script using awk?

I found that echo "aaa" | awk '{print ",\\";}' works, and it will give "\". but ddd=`echo "aaa" | awk '{print ",\\";}'`; echo $ddd will not work. Could anyone tell me why? thank you. (8 Replies)
Discussion started by: wxuyec
8 Replies

6. Shell Programming and Scripting

strange: sed and awk print at end instead of begin of line

Hi! I have a strange behaviour from sed and awk, but I'm not sure, if I'm doing something wrong: I have a list of words, where I want to add the following string at the end of each line: \;\;\;\;0\;1 I try like this: $ cat myfile | awk '{if ( $0 != "" ) print $0"\;\;\;\;0\;1"}' Result:... (5 Replies)
Discussion started by: regisl67
5 Replies

7. Shell Programming and Scripting

awk/shell script to print each line to a file

Dear People, My query is: have a file, which looks likes this: 10 20 30 40 50 1 2 3 4 5 100 200 300 400 500 what i need is: "PRINT EACH LINE TO AN UNIQUE FILE" desired output: file 1 10 20 30 40 50 file 2 1 2 3 4 5 (3 Replies)
Discussion started by: saint2006
3 Replies

8. Shell Programming and Scripting

shell script(Preferably awk or sed) to print selected number of columns from each row

Hi Experts, The question may look very silly by seeing the title, but please have a look at it clearly. I have a text file where the first 5 columns in each row were supposed to be attributes of a sample(like sample name, number, status etc) and the next 25 columns are parameters on which... (3 Replies)
Discussion started by: ks_reddy
3 Replies

9. Shell Programming and Scripting

awk BEGIN problem

awk 'BEGIN { print "line one\nline two\nline three" }' After ./awktest.sh Usage: awk -f progfile file ... Usage: awk 'program' file ... POSIX options: GNU long options: -f progfile --file=progfile -F fs --field-separator=fs -v var=val ... (7 Replies)
Discussion started by: cola
7 Replies

10. Shell Programming and Scripting

awk getting stuck after BEGIN

I am beginner in awk awk 'BEGIN{for(i=1;(getline<"opnoise")>0;i++) arr=$1}{print arr}' In the above script, opnoise is a file, I am reading it into an array and then printing the value corresponding to index 20. Well this is not my real objective, but I have posted this example to describe... (1 Reply)
Discussion started by: akshaykr2
1 Replies
Login or Register to Ask a Question