如何在Awk单行/单命令中包含简短函数?

我知道,通常情况下,你不希望单行/单行命令太长,但似乎偶尔会有一个长长的单行程序,可以用一个函数replace重复元素。

是否可以使用一个简短的函数来减less命令的长度?

例如,我所知道的awk中没有上限或下限函数,所以你可以编写函数

'function round(a){a=(a < int(a)+0.5) ? int(a) : int(a+1)}' 

 'function ceil(a){a=(a == int(a)) ? a : int(a)+1}' 

你能把这些function合并到一个衬里吗?

例如

你可以在脚本中使用它来获得文件的天花板

 $ cat money.data 121.52 133.45 136.77 155.22 132.11 141.30 12.78 78.98 31.21 149.03 33.50 84.67 

…对于天花板function将是:

 $ tail money.data 122 134 137 156 133 142 13 79 32 150 34 85 

…和圆的function将是

 $ tail money.data 122 133 137 155 132 141 13 79 31 149 34 85 

我随机awk语句玩弄,但无法弄清楚如何将function合并到一个衬里…

只需在函数中使用return语句:

 function round(a){return (a < int(a)+0.5) ? int(a) : int(a+1)} {for (f=1;f<=NF;f++) print round($f)} 

函数是由值而不是由引用调用的,所以变量值的变化不会影响调用者的变量。