Difference between revisions of "Linux-AWK/C2/Loops-in-awk/English"
Nancyvarkey (Talk | contribs) |
|||
Line 18: | Line 18: | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Slide 2: Learning Objective | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Slide 2: Learning Objective | ||
| style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| In this tutorial we will learn about- | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| In this tutorial we will learn about- | ||
− | |||
− | |||
* '''while''' | * '''while''' | ||
* '''do-while''' | * '''do-while''' | ||
Line 34: | Line 32: | ||
* '''gedit text editor 3.20.1''' | * '''gedit text editor 3.20.1''' | ||
− | + | You can use any text editor of your choice. | |
− | + | ||
− | + | ||
|- | |- | ||
Line 43: | Line 39: | ||
* You should have familiarity with any '''programming language''' like C or C++ | * You should have familiarity with any '''programming language''' like C or C++ | ||
* If not, then please go through the corresponding tutorials on our website. | * If not, then please go through the corresponding tutorials on our website. | ||
− | |||
− | |||
|- | |- | ||
Line 90: | Line 84: | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight i = 1 | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight i = 1 | ||
| style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Initially, we have to the set the value of the '''loop variable i '''as 1. | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Initially, we have to the set the value of the '''loop variable i '''as 1. | ||
− | |||
− | |||
− | |||
|- | |- | ||
Line 99: | Line 90: | ||
− | + | '''Variable f''' represents the '''field counter '''or the position of the '''fields''' for each '''record'''. | |
|- | |- | ||
Line 111: | Line 102: | ||
|- | |- | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight f++ | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight f++ | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Then we will | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Then we will increment the '''field counter f''' by 1. |
|- | |- | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight i++ | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight i++ | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| After that, we will also increment the value of '''loop | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| After that, we will also increment the value of '''loop variable i''' by 1. |
|- | |- | ||
Line 179: | Line 170: | ||
− | The same is available in the '''Code Files '''link. | + | The same file is available in the '''Code Files '''link. |
|- | |- | ||
Line 189: | Line 180: | ||
− | After that, the '''statements '''inside the '''loop '''will be executed repeatedly as long as the '''condition '''is '''true'''. | + | After that, |
+ | *the '''statements '''inside the '''loop '''will be executed repeatedly | ||
+ | *as long as the '''condition '''is '''true'''. | ||
|- | |- | ||
Line 208: | Line 201: | ||
Now type: | Now type: | ||
+ | '''awk space hyphen small f do underscore loop dot awk awkdemo dot txt''' | ||
− | + | Press '''Enter''' | |
− | + | ||
− | + | ||
|- | |- | ||
Line 226: | Line 218: | ||
<nowiki>[code uploaded as while_loop_mod.awk]</nowiki> | <nowiki>[code uploaded as while_loop_mod.awk]</nowiki> | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Switch to the file ''' | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Switch to the file '''while underscore loop dot awk''' |
Line 242: | Line 234: | ||
|- | |- | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Press Ctrl+S | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Press Ctrl+S | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Save the file and switch to '''terminal'''. | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Save the file and switch to the '''terminal'''. |
|- | |- | ||
Line 248: | Line 240: | ||
<nowiki>[Enter]</nowiki> | <nowiki>[Enter]</nowiki> | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Clear the '''terminal'''. |
+ | |||
+ | |||
+ | Now press Up arrow key until you get the command for executing the '''while loop.''' | ||
Line 262: | Line 257: | ||
|- | |- | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Now, let us make | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Now, let us make some changes in the '''do loop '''file. |
|- | |- | ||
Line 268: | Line 263: | ||
<nowiki>[code uploaded as do_loop_mod.awk]</nowiki> | <nowiki>[code uploaded as do_loop_mod.awk]</nowiki> | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Switch to the file ''' | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Switch to the file '''do underscore loop dot awk''' |
− | Change the value of '''i '''from 1 to 4 | + | Change the value of '''i '''from 1 to 4. |
Line 280: | Line 275: | ||
<nowiki>[Enter]</nowiki> | <nowiki>[Enter]</nowiki> | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Clear the '''terminal'''. |
+ | Now press the Up arrow key until you get the command for '''do loop.''' | ||
− | + | ||
+ | Press '''Enter.''' | ||
|- | |- | ||
Line 297: | Line 294: | ||
|- | |- | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight in code file | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Highlight in code file | ||
− | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| For each row, '''awk''' first prints the value at the first''' field, '''because value of | + | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| For each row, |
+ | *'''awk''' first prints the value at the first''' field, ''' | ||
+ | *because value of '''variable f '''is initialized to '''1.''' | ||
Line 303: | Line 302: | ||
− | Since the value of the '''loop counter i '''is 4, the '''condition '''is '''false'''. | + | Since the value of the '''loop counter i '''is 4, then the '''condition '''is '''false'''. |
Line 320: | Line 319: | ||
− | Use the '''do-while loop, '''for a job to be executed at least once irrespective of any other '''condition'''. | + | Use the '''do-while loop, '''for a job to be executed at least once, irrespective of any other '''condition'''. |
|- | |- | ||
Line 331: | Line 330: | ||
− | The | + | The '''for statement''' starts by executing '''''initialization'''''. |
− | Then, as long as the''' | + | Then, as long as the'''''condition''''' is true, it repeatedly executes the '''''statements''' ''within and then '''''increments''''' |
Line 467: | Line 466: | ||
− | I have added '''dollar zero tilde slash caret symbol double hash slash within | + | I have added '''dollar zero tilde slash caret symbol double hash slash within braces nextfile semicolon '''below the '''begin statement'''. |
− | This will search for double '''hash #''' symbol at the beginning of | + | This will search for double '''hash #''' symbol at the beginning of each line. |
Line 486: | Line 485: | ||
<nowiki>[Enter]</nowiki> | <nowiki>[Enter]</nowiki> | ||
| style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Switch to the the '''terminal '''and type the following command. | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Switch to the the '''terminal '''and type the following command. | ||
− | |||
− | |||
− | |||
− | |||
Press''' Enter''' | Press''' Enter''' | ||
Line 500: | Line 495: | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Slide 13: Summary | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Slide 13: Summary | ||
| style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| This brings us to the end of this tutorial. | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| This brings us to the end of this tutorial. | ||
− | |||
Let us summarize. | Let us summarize. | ||
Line 506: | Line 500: | ||
In this tutorial we learnt about- | In this tutorial we learnt about- | ||
− | |||
* '''while''' | * '''while''' | ||
* '''do… while''' | * '''do… while''' | ||
Line 512: | Line 505: | ||
* '''next''' | * '''next''' | ||
* '''nextfile '''in''' awk''' | * '''nextfile '''in''' awk''' | ||
− | |||
− | |||
|- | |- | ||
Line 521: | Line 512: | ||
* print only even '''fields'''(i.e. '''field''' 2, '''field''' 4 etc. | * print only even '''fields'''(i.e. '''field''' 2, '''field''' 4 etc. | ||
* irrespective of how many '''fields''' are there in the '''input file'''. | * irrespective of how many '''fields''' are there in the '''input file'''. | ||
− | |||
− | |||
|- | |- | ||
Line 548: | Line 537: | ||
| style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Do you have questions in THIS Spoken Tutorial? | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Do you have questions in THIS Spoken Tutorial? | ||
− | + | Please visit this site. | |
− | + | ||
− | Please visit this site | + | |
|- | |- | ||
| style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Slide 16: Acknowledgement | | style="background-color:#ffffff;border-top:0.035cm solid #000001;border-bottom:0.035cm solid #000001;border-left:0.035cm solid #000001;border-right:none;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Slide 16: Acknowledgement | ||
| style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Spoken Tutorial Project is funded by NMEICT, MHRD, Government of India. | | style="background-color:#ffffff;border:0.035cm solid #000001;padding-top:0cm;padding-bottom:0cm;padding-left:0.191cm;padding-right:0.191cm;"| Spoken Tutorial Project is funded by NMEICT, MHRD, Government of India. | ||
− | |||
− | |||
More information on this mission is available at this link. | More information on this mission is available at this link. |
Revision as of 09:25, 1 February 2018
Title of script: Loops in Awk
Author: Antara Roy Choudhury
Keywords: for, while, do-while, next, nextfile
|
|
Slide 1: Introduction | Welcome to this spoken tutorial on Loops in awk. |
Slide 2: Learning Objective | In this tutorial we will learn about-
We will do this through some examples. |
Slide 3: System requirement | To record this tutorial, I am using
You can use any text editor of your choice. |
Slide 4: Pre-requisite | * To practice this tutorial, you should have gone through the previous awk tutorials on our website.
|
Slide 5: Code Files | The files used in this tutorial are available in the Code Files link on this tutorial page.
|
Slide 6: Loops | A loop allows us to perform one or more actions repeatedly.
|
Slide 7: While loop | The syntax of while loop can be seen here.
If yes, then it executes the code within the body.
|
Show awkdemo.txt file in gedit | We will use the same awkdemo.txt file, that we have used earlier. |
show while_loop.awk in Gedit | I have already written a script named while_loop.awk
|
Point to the pipe symbol | Here we have set the field separator as Pipe symbol. |
Highlight i = 1 | Initially, we have to the set the value of the loop variable i as 1. |
Highlight f = 1 | Here, we have taken one more variable f and initialized it to 1.
|
Highlight while (i<=3) | Now, in the while condition, we check if i is less than or equal to 3. |
Highlight Print statement | If yes, then it will print the value in the fth field, for that record in awkdemo.txt file. |
Highlight f++ | Then we will increment the field counter f by 1. |
Highlight i++ | After that, we will also increment the value of loop variable i by 1. |
Highlight printf("\n") | This printf is for printing a newline character at the end of each row. |
This loop will be executed for all the records in the awkdemo.txt file.
| |
Let’s execute this code now. | |
Open the terminal | Open the terminal by pressing Ctrl, Alt and T keys. |
cd /<saved folder> | Go to the folder in which you downloaded and extracted the Code Files using cd command |
Type in terminal:
awk -f while_loop.awk awkdemo.txt [Enter] |
Now type:
awk space minus small f while_loop.awk space awkdemo.txt
|
Show the output | Observe that we get the first three fields of all the rows in the output. |
Let us do the same with the do-while loop. | |
Slide 8: Do While Loop | The syntax of do-while loop can be seen here.
|
show do_loop.awk in Gedit | I have already written a script and named it as do_loop.awk
|
Show the contents and highlight appropriately | In this code, these are the statements within the do loop, which will be executed first.
|
This loop will iterate for all the records in the awkdemo.txt file
| |
Type:
awk -f do_loop.awk awkdemo.txt [Enter] |
Let’s switch to the terminal. Let me clear the terminal.
Now type: awk space hyphen small f do underscore loop dot awk awkdemo dot txt Press Enter |
Scroll up and show outputs of while loop and do loop | We get the same output.
Let us understand the difference. |
In while_loop.awk, assign i=4
[code uploaded as while_loop_mod.awk] |
Switch to the file while underscore loop dot awk
|
Highlight
(i<=3) |
This will make the specified condition false from the beginning.
|
Press Ctrl+S | Save the file and switch to the terminal. |
awk -f while_loop.awk awkdemo.txt
[Enter] |
Clear the terminal.
|
Show the output | See, we are not getting any output apart from blank lines.
|
Now, let us make some changes in the do loop file. | |
In do_loop.awk, assign i=4
[code uploaded as do_loop_mod.awk] |
Switch to the file do underscore loop dot awk
|
awk -f do_loop.awk awkdemo.txt
[Enter] |
Clear the terminal.
Now press the Up arrow key until you get the command for do loop.
|
Show the output
|
In the output, only the first field for each row is printed.
|
Highlight in code file | For each row,
|
Highlight in code file | This loop will iterate for all the records in the awkdemo.txt file.
|
Highlight output | We are getting the output at least once for each record.
|
Retain same screen | We can do the same with the for loop also. |
Slide 9: for loop | The syntax of for loop can be seen here.
|
show for_loop.awk in Gedit | This is how the for loop for this condition looks like.
|
Slide 10: looping constructs | There are some more looping constructs
We will see some relevant examples on these in further tutorials. |
Show awkdemo_mod.txt | We may have a single and multiline comments in our file.
|
Highlight | Now, there is no point of checking and printing these comments in the output.
|
Recall the case of giving 50% increment in the stipend for those who are getting more than 8000.
| |
show next.awk
|
I have created a file named next.awk as shown here for this execution. |
Highlight $0~/^#/ {next;} | Now, what does this command mean? |
Slide 11: next | awk will search for the pattern, caret sign hash symbol(^#) at the beginning of each line.
|
Type
awk -F "|" -f next.awk awkdemo_mod.txt [Enter] |
Switch to the terminal and type the command as shown and
press Enter. |
Show the output | We get the output without any comments. |
Suppose, we have the students’ records in multiple files with the same format.
| |
Show awkdemo2.txt | See, it is similar to our previous file.
|
Slide 12: nextfile | So our data is in two different files.
awk should stop processing that file entirely.
|
Type $0~/^#/ {next;} after the begin statement.
|
Modify the next.awk as shown here.
|
Press Ctrl+s | Save this file. |
Type
awk -F "|" -f next.awk awkdemo_mod.txt awkdemo2.txt [Enter] |
Switch to the the terminal and type the following command.
Press Enter |
Show the output | See, we are getting the output from both the files. |
Slide 13: Summary | This brings us to the end of this tutorial.
Let us summarize.
|
Slide 14: Assignment | As an assignment for the student records of awkdemo2.txt,
|
Slide 13:
About Spoken Tutorial project |
The video at the following link summarises the Spoken Tutorial project.
|
Slide 14:
Spoken Tutorial workshops |
The Spoken Tutorial Project team conducts workshops using spoken tutorials and gives certificates on passing online tests.
|
Slide 15:
Forum for specific questions: |
Do you have questions in THIS Spoken Tutorial?
Please visit this site. |
Slide 16: Acknowledgement | Spoken Tutorial Project is funded by NMEICT, MHRD, Government of India.
More information on this mission is available at this link. |
Slide 17: Thanks | The script has been contributed by Antara.
|