AWK help please - beginner


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers AWK help please - beginner
# 1  
Old 06-10-2007
AWK help please - beginner

Hi, I'm in dire need of some help for AWK. I'm a college student and my statistics professor decided he'd teach AWK in the last two days of our class, even when it's not programming class and we don't even have computers in class to experiment. Anyway, I tried looking at AWK tutorials, but it doesn't necessarily teach me in the sequence our professor taught it. This is the code our professor wrote on the board for printing lines. I can't figure the thing out. If anyone can interpret it or correct me (if I miscopied the code), thank you.

Abe M 70
Bea F 65
Cathy F 67
Dave M 69

Code:
{if ($2 == "M"){
s=s+$3
n=n+1
}END{
print s, n, s/n, "avg height"
}

I have trouble understand the "s=s+$3" and "n=n+1" lines. What do those mean? Also, I have trouble understanding the "print" line. Obviously it means to print, but what would it print? "s" "n" and "s/n?" What is the "s/n" line?

Here's another one.

Abe M 70
Bea F 65
Cathy F 67
Dave M 69

Code:
{
if ($N / [fF] /) {
fsum = fsum + 3
fnum = fsum + 1
}
if ($2N/[mM]){
msum = msum + $3
mnum = mnum + 1
}
}

What does "if ($N / [fF] /)" or "($2N/[mM])" mean?

THX


I've studied HTML, Javascript and CSS in the past, and I like to know what each line or code does. I'm very OCD with programming, but it just frustrates me that the professor is simply teaching it this way WITHOUT (i repeat) a computer. This has got to be, by far, the most knuckleheaded professor I've probably taken in this college. Thx for the help.
# 2  
Old 06-10-2007
Code:
{if ($2 == "M"){  if the second fiedl is "M"
s=s+$3           add the value stored in s to the value in the third column, store sum in s
n=n+1            add one to the count of records
}END{
print s, n, s/n, "avg height"  When done with file: print sum, count, sum divided by count, the literal "avg height"
}

# 3  
Old 06-10-2007
Quote:
Here's another one.

Abe M 70
Bea F 65
Cathy F 67
Dave M 69

Code:
{
if ($N / [fF] /) {
fsum = fsum + 3
fnum = fsum + 1
}
if ($2N/[mM]){
msum = msum + $3
mnum = mnum + 1
}
}

What does "if ($N / [fF] /)" or "($2N/[mM])" mean?
Your awk program isn't valid.
The is a problem with the syntax of the two if staments.
If you try to execute it, you will get the following errors (with GNU awk):
Code:
$ awk -f coll.awk inputfile
awk: coll.awk:3:    if ($N / [fF] /) {
awk: coll.awk:3:             ^ syntax error
awk: coll.awk:3:    if ($N / [fF] /) {
awk: coll.awk:3:                   ^ unterminated regexp
awk: coll.awk:7:    if ($2N/[mM]){
awk: coll.awk:7:    ^ syntax error
awk: coll.awk:7:    if ($2N/[mM]){
awk: coll.awk:7:            ^ syntax error
awk: coll.awk:7:    if ($2N/[mM]){
awk: coll.awk:7:                 ^ syntax error
awk: coll.awk:9:       msum = msum + $3
awk: coll.awk:9:                       ^ unexpected newline or end of string
awk: coll.awk:10:       mnum = mnum + 1
awk: coll.awk:10:                      ^ unexpected newline or end of string
$

Jean-Pierre.
# 4  
Old 06-13-2007
Explaining with little more detail

{if ($2 == "M"){
s=s+$3
n=n+1
}END{
print s, n, s/n, "avg height"
}

hi
I am new to the forum and I am first time posting any reply.So if any thing is wrong forgive me fr that .

now the answer to the first question

My friend you have to first understand the basic rule for these lines and then you will understand the whole syntax easily . lets take it one by one.
if ($2 == "M")----- /* awk goes to every line of file 1 by 1 and executes the command repetedly fr every line so, $2 is compared with the 2nd field that is 'M' since its boolean output is true then it goes to next line */

{
s=s+$3 -----/* Note after the block i.e '{' you can assign a variable (here it is s & n) and if that variable is not initialized then in shellscript uninitialized variable is given the value 0 so your values fr the first line scanning are s=0+70 ===> s=70
n=0+1 ===> n=1
}

and again for the second time you get if ($2 == "M") =true then you are assign
s=s+$3 => s=70+69 = 139
n=n+1 => n=1+1 =2


now once all the lines are scannned in a file
then there is final action taken on the results obtained during scanning of file
this is done by
END{final action}
so you have now variables and now you can get them printed the way you like i.e
END{
print s, n, s/n, "avg height"
}


thanx
Smilie
# 5  
Old 06-13-2007
Another explanation to accompany. I wrote to a work colleague which might find useful:
--------------
Basically, an awk script is this:
------------
BEGIN{}
/<search string>/
{ <put your code in here> }
/<search string 2>/
{ <put your code in here> }
------------

And that's it!

Now, if you then run this awk file
(using "awk -f your.awk file.to.process > file.to.output")....

suppose your file to process is 3 lines of data:
ABC
DEF
GHI


When you run the command, the process is basically like this:
process reads in line 'ABC', goes to awk.file and says 'begin.....ok......search string...ok....search string 2....ok....finish'
then, process reads in line 'DEF', goes to awk.file and says 'begin.....ok.....search string....ok....search string 2......ok....finish'
then ......
contine until the end of the input file!

That's all it does!


So now, you can do stuff like:


BEGIN{}
/ABC/{
printf("go away")
}

/GHI/{
printf("hello again")
}


So basically, awk scripts treat each line in the file like a record.
The search strings are basically - is 'ABC' in this line? - if it is, carry out the code underneath

Within the record, each record has fields.
In awk, fields are delimited by space (which you can set to something else if req.)
So this line
"grep 'who is your daddy?'"
will have five fields
$1 = grep
$2 = 'who
$3 = is
$4 = your
$5 = daddy?'

$0 is the whole record.

So you can do stuff like
printf($4) and all that kind of stuff.

That's it.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Red Hat

Help me please i am beginner

i have windows 8 host on Dell Laptop vmware 9 redhat 7.2 iso downloaded through redhat official site after installation on vm it only boots into text dont show graphics Please guide:( (1 Reply)
Discussion started by: hananabbas
1 Replies

2. UNIX for Dummies Questions & Answers

awk Help - Beginner

Hi, I think I need to use AWK - however I have no experience of it. Can someone help please? I have a file like this but with many more records - it is fixed width THIS15021X 799999 XX 00000099999 00008888888 XX 15022013 THISQ15021X 999999 XX 00000099999... (7 Replies)
Discussion started by: mcclunyboy
7 Replies

3. Shell Programming and Scripting

AWK for a beginner

I am going to learn AWK for Pattern search (extracting strings ) related activities. I think that is what AWK is used for anyway. What book/similair resource would you suggest for a beginner ? (4 Replies)
Discussion started by: omega3
4 Replies

4. Shell Programming and Scripting

""Help Me!""Beginner awk learning issue

Hi All, I have just now started learning awk from the source - Awk - A Tutorial and Introduction - by Bruce Barnett and the bad part is that I am stuck on the very first example for running the awk script. The script is as - #!/bin/sh # Linux users have to change $8 to $9 awk ' BEGIN ... (6 Replies)
Discussion started by: csrohit
6 Replies

5. Shell Programming and Scripting

Beginner looking for help

Hello, I am trying to write a script that reads names from a file called input, removes names if they have the same letter next to each other and prints the others. e.g. Colin & John would be printed Garry & Lynn would be removed My thinking is that I read in each name and... (3 Replies)
Discussion started by: colinireland
3 Replies

6. UNIX for Dummies Questions & Answers

Beginner - What Should I Do First?

Hi people.... I have just started to learn unix.I want to know which version of Unix to install plus how to install it.I need to practise and make myself aware of how unix works.My thread is from an educational point of view.Also please feel free to give your suggestions as I am... (3 Replies)
Discussion started by: amit.kanade1983
3 Replies

7. Shell Programming and Scripting

Beginner Help

I need to write a script to test a nsort c program. I have written 8 .txt files with different cases. Also 8 .txt files with expected outcome. The shell I have written always "test pass" for the first case but always "fail" for the rest... Here is a portion of my code (as I still don't know how to... (5 Replies)
Discussion started by: thibodeau
5 Replies

8. UNIX for Dummies Questions & Answers

Beginner Help

hi guys, i have a DEl xps laptop cor 2 duo 2.2 i have vista installed on it i want to install a dual Boot UNIX on it.. can some one guide me ...cause i m tottaly new to UNIX i want to install unix on that laptop along with Vista.... thx any help would be deeply appreciated (sorry if i... (5 Replies)
Discussion started by: Farhan082
5 Replies

9. Programming

Beginner C

Anyone know where I can get started in C++ programming in unix? Any good free tutorials or websites to start at? I am okay in unix scripting but have never done c programming of any sort... What are the main advantages of using C++ ? (2 Replies)
Discussion started by: frustrated1
2 Replies

10. Shell Programming and Scripting

Please help. I am a beginner.

Alrigt, I need to write a shell script where it counts the number of folders and files and dispays "My home directory has 'x' files and 'y' directories." So, I was thinking of doing this. set x = `ls | wc` so, if I have 8 files and folders in my home directory, x is not 8. now, I was... (1 Reply)
Discussion started by: Lykathea Aflame
1 Replies
Login or Register to Ask a Question