Linux-AWK/C2/User-Defined-Functions-in-awk/English-timed
| |
|
| 00:01 | Hello and welcome to this Spoken Tutorial on User-defined functions in awk. |
| 00:07 | In this tutorial, we will learn about-
syntax of function definition, function call and 'Return' statement. |
| 00:17 | We will do this through some examples. |
| 00:21 | To record this tutorial, I am using:
Ubuntu Linux 16.04 Operating System and gedit text editor 3.20.1 |
| 00:34 | You can use any text editor of your choice. |
| 00:38 | To practice this tutorial, you should have gone through the earlier awk tutorials on this website. |
| 00:45 | You should have some knowledge of any programming language like C or C++. |
| 00:52 | If not, then please go through the corresponding tutorials on our website. |
| 00:58 | The files used in this tutorial are available in the Code Files link on this tutorial page.
Please download and extract them. |
| 01:08 | Now, let us learn about user defined functions.
The function syntax is as follows. |
| 01:16 | And, the syntax is self-explanatory. |
| 01:20 | Here, the keyword function is mandatory. |
| 01:24 | To call a function, write the name of the function followed by the arguments in parentheses. |
| 01:31 | Note: space is not allowed between the function name and the open parentheses of the argument. |
| 01:39 | We will see one example now. |
| 01:42 | In our awkdemo.txt file, the sixth field represents stipend. |
| 01:47 | Assume that stipend is either zero or consists of four digits. |
| 01:54 | Suppose, stipend is 8900.
Print it as 8 thousand 9 hundred in words. |
| 02:03 | If stipend is 0, print as zero in words. |
| 02:08 | I have already written the code in a file named user_function.awk |
| 02:15 | Here, I have written a function named changeit with a single argument 'argval'. |
| 02:23 | Here, argval is basically our sixth field which is stipend. |
| 02:29 | Inside the function, the first code will check if argval is zero or not. |
| 02:36 | If yes, it will print “Zero” in words. |
| 02:40 | If not, then else part of the code will be executed. |
| 02:46 | In the else part, first we will extract each digit one by one using the substring function. |
| 02:54 | And, we'll store the values in an array a at different indices. |
| 03:00 | For example- a[1] will give the first digit from left hand side or the thousand’s place digit. |
| 03:08 | Since we have only four digits, I have used four indices. |
| 03:13 | Next, we will check whether the elements are not equal to zero.
And print them in a proper order. |
| 03:21 | At the end, we print a backslash n character to provide a new line break in the output. |
| 03:28 | Then, inside the awk script, we have printed dollar 2 which is the second field that is name. |
| 03:35 | Then we call the function changeit with the parameter dollar 6 which is stipend.
Let’s execute the file. |
| 03:43 | Switch to the terminal.
Next, go to the folder where you have downloaded and extracted the file using cd command. |
| 03:53 | Now, type the following command and press Enter. |
| 04:00 | We get the output as expected. |
| 04:03 | An user-defined function can also include a return statement. |
| 04:08 | This statement returns control to the calling part of the awk program. |
| 04:13 | It can also be used to return a value for use in the rest of the awk program. |
| 04:20 | It looks like this: return space expression.
Here, the expression part is optional. |
| 04:29 | Let’s write a function to return average of an array. |
| 04:34 | I have written the code in the file average.awk
Let’s view the contents. |
| 04:41 | We have defined a function named avg for this purpose. |
| 04:46 | It has five parameters.
arr is the array for which the average is to be calculated. |
| 04:55 | i is array loop variable. |
| 04:58 | sum is the summation of all array elements. |
| 05:03 | n indicates the number of elements in array. |
| 05:07 | ret represents the variable to be returned from the function avg.
ret will store the calculated average. |
| 05:17 | The extra space before i indicates that the variables i, sum, n and ret are local variables. |
| 05:27 | Actually, the local variables are not intended to be arguments. |
| 05:32 | You should follow this convention when defining functions. |
| 05:36 | Inside the for loop, we have calculated the total number and summation of array elements. |
| 05:43 | We have calculated the average by dividing summation with the total number of elements
and stored that value in variable ret. |
| 05:54 | This function avg() returns the value of the variable ret. |
| 06:01 | Inside the BEGIN section, we have defined array nums with 5 different numbers. |
| 06:07 | In the print statement, we call the function avg() with one argument which is the array name. |
| 06:14 | So, you do not have to pass local variables as arguments. |
| 06:20 | Switch back to the terminal. Let me clear the terminal. |
| 06:26 | Type the following command- awk space hyphen f space average dot awk.
Press Enter. |
| 06:37 | We get the output as 3.6.
You can validate it by using a calculator. |
| 06:44 | Let us look at one more example. |
| 06:47 | I have written a code to reverse a string and named it as reverse.awk.
recursive function is used to reverse a string. |
| 06:57 | Pause the video here and look at the code to understand how the control flows.
Then execute it to see the output. |
| 07:07 | As an assignment, use the function rev to reverse the Roll number field in awkdemo.txt file. |
| 07:16 | For example, if the roll number is A001, output should be 100A. |
| 07:24 | The code for the same is provided as reverse_roll.awk in the Code Files link. |
| 07:31 | This brings us to the end of this tutorial.
Let us summarize. |
| 07:36 | In this tutorial we learnt about-
syntax of function definition, |
| 07:41 | function call and
Return statement. |
| 07:45 | As an assignment-
Write a function to create a transpose of a 2D matrix. |
| 07:52 | Write a function to return the minimum value element from an array. |
| 07:58 | The video at the following link summarises the Spoken Tutorial project.
Please download and watch it. |
| 08:06 | The Spoken Tutorial Project team conducts workshops using spoken tutorials.
And, gives certificates on passing online tests. |
| 08:16 | For more details, please write to us. |
| 08:20 | Please post your timed queries in this forum. |
| 08:24 | Spoken Tutorial Project is funded by NMEICT, MHRD, Government of India.
More information on this mission is available at this link. |
| 08:36 | The script has been contributed by Antara.
And this is Praveen from IIT Bombay, signing off. Thank you for joining. |