`awk`

Exercise 4
Save the following data in a file named `coordinates.txt`.

A,0,0;B,3,4 C,4,7;D,2,9 E,8,2;F,0,6

Each line of the file contains the name of a point and its
x-y coordinates, a semicolon, then the name of a second point and its
x-y coordinates.
Write an `awk`

script that will do the following:

- Set the field separator to comma and semicolon before processing any lines
- Calculate the distance between the points using this formula:
This calculation

*must*be done in a user-defined function named`distance`

. This function will take four arguments for the x and y coordinates of the two points. - Calculate the distance between the points using the
“city block” formula:
This calculation

*must*be done in a user-defined function named`city_block`

. This function will take four arguments for the x- and y- coordinates of the two points. Print the point names and their coordinates; this will be done by calling a user-defined function named

`show_point`

twice, once for each point. The point names and coordinates will be followed by the distances. The`show_point`

function will take three arguments: the point name, the x-coordinate and the y-coordinate.Your script must not be tied to this specific data. If the numbers change, or if records are added or deleted, your script must still produce the correct results.

After you have processed all the records, generate two random numbers in the range 0 to 10 (inclusive). These will be coordinates for point "Q". Then generate two random numbers in the range 0 to 10 (inclusive) as point "R". Print the coordinates for these new points, then calculate and print the distance and city block distance for these new, random points.

Print the output to look like the following. Print only three numbers after the decimal point.

From A (0, 0) to B (3, 4): actual distance 5.000; city block distance 7 From C (4, 7) to D (2, 9): actual distance 2.828; city block distance 4 From E (8, 2) to F (0, 6): actual distance 8.944; city block distance 12 From Q (9, 2) to R (3, 7): actual distance 7.810; city block distance 11

Name your file in the form
` lastname_firstname_coordinates.awk` and upload
it to Moodle.

BEGIN { FS="[;,]"} function distance( x1, y1, x2, y2 ) { # set variabledto the square root of (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) # returnd} function city_block( x1, y1, x2, y2 ) { # set variabled1to x1 - x2 # if d1 is less than zero, set d1 to -d1 # set variabled2to y1 - y2 # if d2 is less than zero, set d2 to -d2 # set variableresultto d1 + d2 # return variableresult} function show_point( name, x, y ) { # use a printf to print the three parameters -- don't use a \n # if variablenamecontains "A", # variablexcontains 5, and variableycontains 7, # the printf should produce: # A (5, 7) } # $1 is point 1 # $2 is x1 # $3 is y1 # $4 is point 2 # $5 is x2 # $6 is y2 { # set variableactualto the distance from ($2, $3) to ($5, $6) # set variablecityto the city block distance from ($2, $3) to ($5, $6) printf "From " # call show_point with parameters $1, $2, and $3. printf " to " # call show_point with parameters $4, $5, and $6 # now call printf to display the variablesactualandcity} END { # seed the random number generator # set x1 to the integer part of a random number times 11 # set y1 to the integer part of a random number times 11 # set x2 to the integer part of a random number times 11 # set y2 to the integer part of a random number times 11 # set variableactualto the distance from (x1,y1) to (x2,y2) # set variablecityto the city block distance from (x1,y1) to (x2, y2) printf "From " # call show_point with parameters "Q", x1, and y1 printf " to " # call show_point with parameters "R", x2, and y2 # now call printf to display the variablesactualandcity}