User defined functions
Related Awk documentation
Usually at this point (looking on how to write own functions) you have a working script (I doubt you want to do this on one line) and you want to wrap your repetitive task in a function call...
The User defined function syntax is as follows
function name([parameter-list])
{
body-of-function
[return variable]
}
Here is a simple example.
It is rather surprising but awk dows not have funtion to return athe absolute value of a number.
function abs(x){
if (x >= 0) return x
else return -x
}
or
function abs(x) { return (x >= 0) ? x : -x }
Here is another example from one of the study cases Gaussian smearing
Gaussian funtion. I have used \(x_0\) instead of \(b\) for the peak center.
function gauss(x0,x,c){
area=1;
if ((x-x0)**2 < 10000) { return area*exp(-(((x-x0))**2)/(2.*c**2))}
else {return 0.0}
}
The function returns the value for the Gaussian for a point \(x\) away from the center. For large \((x-x0)^2\) the exp()
was crashing, so I needed to add a condition which makes sure that for these very large numbers the function does not call the exp(...)
but returns directly 0.0
instead. The function is called within a double loop on line 23
23 |
|
Warning
It's entirely fair to say that the awk syntax for local variable definitions is appallingly awful.
- Brian Kernighan source