Awk Functions
最近写Awk比较多,所以写了一些便于自己使用的函数。
function printX(o, _indent, _x){
if(typeof(o) != "array"){ print o; return; }
for(_x in o){
if(typeof(o[_x]) != "array"){
print _indent, _x, ":", o[_x];
}else{
print _indent, _x, ":";
printX(o[_x], _indent" ");
}
}
}
打印嵌套结构的Awk Array,方便调试查看。
Clone
function clone(ma, mb, _x){
for(_x in ma){
if(typeof(ma[_x]) != "array"){
mb[_x] = ma[_x];
}else{
mb[_x][__Y__] = 1;
clone(ma[_x], mb[_x]);
delete mb[_x][__Y__];
}
}
}
Clone就是一个递归函数,没有什么特别的。为什么要给Awk实现一个Clone函数呢?
因为Awk无法做这样的赋值操作,当map[a]是Array时,b = map[a]会报错,
错误提示为:试图在标量环境中使用数组“map[a]”。这时候我们可以用clone(map[a],b)来替代。
通过用__Y__占位的方式解决多层类型嵌套的问题,clone完后delete掉。