在 AWK 中,为了对数组进行排序,我可以定义自己的排序函数,既可以在 for 循环中控制数组的遍历,也可以调用asort
或asorti
。比较函数的签名最多接受 6 个参数,但最后两个参数是可选的:
function cmp_field(i1, v1, i2, v2, l, r) { whatever; }
l
和的用途是什么r
?据我所知,它们只是占位符,AWK 根本不使用或检查它们,而是为了我自己方便,以便我可以在它们内部存储值,作为某种便利辅助变量。例如分配l
和从和r
计算出的临时值。但是,为什么我需要它们或它们的用途是什么,如果我可以像这样声明自己的变量:v1
v2
function cmp_field(i1, v1, i2, v2) {
l = computation(v1);
r = computation(v2);
whatever;
}
l
除了第二个例子中的全局变量之外,还有其他区别吗r
?或者除此之外还有其他原因吗?
函数参数是局部的。其他变量是全局的。
从规范来看:
和:
awk 中的所有变量都是全局变量,除非在函数签名中使用。因此,如果你在其中使用
l
和,将会全局更改和的值,除非它是函数签名的一部分。r
cmp_field
l
r
如果您在函数中添加了所使用的变量,即使在调用函数时未使用,这些变量也会成为该函数的局部变量。惯例是按照以下方式执行:
考虑这个例子:
印刷: