Linux-AWK/C2/Loops-in-awk/English-timed
|
|
00:01 | Hello and welcome to this spoken tutorial on Loops in awk. |
00:06 | In this tutorial, we will learn about-
while, do-while, for and more looping constructs in awk. |
00:16 | We will do this through some examples. |
00:20 | To record this tutorial, I am using:
Ubuntu Linux 16.04 Operating System and gedit text editor 3.20.1. |
00:32 | You can use any text editor of your choice. |
00:36 | To practice this tutorial, you should have gone through the previous awk tutorials on our website. |
00:43 | You should have familiarity with any programming language like C or C++. |
00:50 | If not, then please go through the corresponding tutorials on our website. |
00:56 | The files used in this tutorial are available in the Code Files link on this tutorial page.
Please download and extract them. |
01:06 | A loop allows us to perform one or more actions repeatedly. |
01:12 | while, do-while and for are the available loops in awk. |
01:18 | The syntax of 'while' loop can be seen here. |
01:22 | While loop first checks whether the specified condition is true. |
01:27 | If yes, then it executes the code within the body.
This loop will be repeated as long as the specified while condition is true. |
01:37 | We will use the same awkdemo.txt file that we have used earlier. |
01:43 | I have already written a script named while_loop.awk. |
01:48 | The same file is available in the Code Files link of this tutorial. |
01:53 | Here, we have set the field separator as Pipe symbol. |
01:58 | Initially, we have to set the value of the loop variable i as 1. |
02:04 | Here, we have taken one more variable f and initialized it to 1. |
02:10 | Variable f represents the field counter or the position of the fields for each record. |
02:17 | Now, in the while condition, we check if i is less than or equal to 3. |
02:23 | If yes, then it will print the value in the fth field, for that record in awkdemo.txt file. |
02:31 | Then we will increment the field counter f by 1. |
02:36 | After that, we will also increment the value of loop variable i by 1. |
02:43 | This printf is for printing a newline character at the end of each row. |
02:49 | This loop will be executed for all the records in the awkdemo.txt file. |
02:55 | Which means, the first 3 fields will get printed for each record. |
03:00 | Let’s execute this code now. |
03:03 | Open the terminal by pressing Ctrl, Alt and T keys. |
03:09 | Go to the folder in which you downloaded and extracted the Code Files using cd command. |
03:16 | Now, type: awk space hyphen small f space while_loop.awk space awkdemo.txt.
Press Enter. |
03:29 | Observe that we get the first three fields of all the rows in the output. |
03:35 | Let us do the same with the do-while loop. |
03:38 | The syntax of do-while loop can be seen here. |
03:42 | The do-while loop always executes the code inside the body once. |
03:47 | Then it checks the specified condition. And, repeats the code inside the body, as long as the specified conditionis true. |
03:56 | I have already written a script and named it as do_loop.awk.
The same file is available in the Code Files link. |
04:06 | In this code, these are the statements within the do loop which will be executed first.
This is the condition that will be checked. |
04:15 | After that, the statements inside the loop will be executed repeatedly as long as the condition is true. |
04:23 | This loop will iterate for all the records in the awkdemo.txt file.
Which means, the first 3 fields will get printed for all the records. |
04:33 | Let’s switch to the terminal. Let me clear the terminal. |
04:38 | Now, type: awk space hyphen small f space do underscore loop dot awk space awkdemo dot txt.
Press Enter. |
04:52 | We get the same output. Then why do we have both while and do-while loops? |
04:58 | Let us understand the difference. |
05:00 | Switch to the file while underscore loop dot awk. |
05:05 | Now, change the value of loop counter i from 1 to 4. |
05:11 | This will make the specified condition false from the beginning.
So, this means, we should not get any output. |
05:19 | Save the file and switch to the terminal. |
05:22 | Clear the terminal.
Now, press the up-arrow key until you get the command for executing the while loop. |
05:30 | Now press Enter. |
05:32 | See, we are not getting any output apart from blank lines. |
05:37 | For each record in the awkdemo.txt file, blank lines are getting printed in the output. |
05:44 | Now, let us make some changes in the do loop file. |
05:48 | Switch to the file do underscore loop dot awk. |
05:53 | Change the value of i from 1 to 4. |
05:57 | Save the file and switch to the terminal. |
06:01 | Clear the terminal.
Now press the up-arrow key until you get the command for do loop. Press Enter. |
06:10 | In the output, only the first field for each row is printed.
What is the reason? |
06:16 | For each row, awk first prints the value at the first field because value of variable f is initialized to 1.
Then the condition is checked. |
06:28 | Since the value of the loop counter i is 4, then the condition is false.
Hence, the loop is terminated there only, for that record. |
06:39 | This loop will iterate for all the records in the awkdemo.txt file. |
06:44 | Which means, the first field for each record will get printed. |
06:49 | We are getting the output at least once for each record. |
06:53 | Use the do-while loop for a job to be executed at least once, irrespective of any other condition. |
07:01 | We can do the same with the for loop also. |
07:05 | The syntax of for loop can be seen here. |
07:09 | The 'for' statement starts by executing initialization. |
07:14 | Then, as long as the condition is true, it repeatedly executes the statements within and then increments. |
07:23 | Assuming your familiarity with a language like C or C++, I am not explaining the syntax in detail. |
07:30 | This is how for loop for this condition looks like. |
07:35 | Here, initialization, condition checking and variable incrementation are done in the same line. |
07:43 | Try this out by yourself. |
07:46 | There are some more looping constructs:
break, continue, exit. |
07:53 | We will see some relevant examples on these in further tutorials. |
07:58 | We may have a single and multiline comments in our file. |
08:03 | Here, notice that the single line comments are declared with single hash (#) symbol. |
08:10 | The multiline comments are declared with the help of double hash (##) symbol. |
08:16 | Now, there is no point of checking and printing these comments in the output. |
08:22 | We have to skip the lines starting with hash (##) symbol.
How can we do this? |
08:28 | Recall the case of giving 50% increment in the stipend for those who are getting more than 8000. |
08:36 | We will use the same example for skipping the comments. |
08:40 | I have created a file named next.awk as shown here, for this execution. |
08:47 | Now, what does this command mean? |
08:50 | awk will search for the pattern caret sign hash symbol(^#) at the beginning of each line. |
08:57 | If the pattern is found, the keyword next tells awk to skip the current line immediately. |
09:04 | Then awk will start processing from the next line in the file.
This will save the processing time. |
09:12 | Switch to the terminal and type the command as shown here.
Press Enter. |
09:20 | We get the output without any comments. |
09:24 | Suppose, we have the students’ records in multiple files with the same format.
Say, in awkdemo_mod.txt and awkdemo2.txt. |
09:37 | See, it is similar to our previous file. |
09:41 | It also has comments preceded with hash symbol. |
09:45 | And, it has large text at the end with double hash ## symbol. |
09:50 | So, our data is in two different files.
awk should process both the files to give an increment to all the students. |
09:59 | Once we reach double hash(##) symbol of the first file, awk should stop processing that file entirely. |
10:06 | Then it has to start the execution from the next file.
This will save the processing time. |
10:13 | Modify the next.awk as shown here. |
10:17 | I have added: dollar zero tilde slash caret symbol double hash slash within braces nextfile semicolon, below the BEGIN statement. |
10:29 | This will search for double hash # symbol at the beginning of each line. |
10:34 | If found, awk will skip the current file to process the next file. |
10:39 | Save this file. |
10:41 | Switch to the the terminal and type the following command.
Press Enter. |
10:48 | See, we are getting the output from both the files. |
10:53 | This brings us to the end of this tutorial.
Let us summarize. |
10:58 | In this tutorial we learnt about- while, do… while, for, next, nextfile in awk. |
11:06 | As an assignment for the student records of awkdemo2.txt, print only even fields(i.e. field 2, field 4 etc.) irrespective of how many fields are there in the input file. |
11:22 | The video at the following link summarises the Spoken Tutorial project.
Please download and watch it. |
11:30 | The Spoken Tutorial Project team conducts workshops using spoken tutorials and gives certificates on passing online tests.
For more details, please write to us. |
11:43 | Do you have questions in THIS Spoken Tutorial?
Please visit this site. |
11:49 | Spoken Tutorial Project is funded by NMEICT, MHRD, Government of India.
More information on this mission is available at this link. |
12:01 | This script has been contributed by Antara.
And this is Praveen from IIT Bombay, signing off. Thanks for joining. |