- 论坛徽章:
- 0
|
本帖最后由 expert1 于 2015-10-08 12:03 编辑
下载了gawk4.1.3,有了二维数组,方便多了。
#conf.ini
node 53 102
node 103 122
node 223 376
renderG 1 202 167 181
renderG 167 204 181 202- awk 'NR==FNR{
- for(i=$2;i<=$3;i++){a[$1" "i]=$2;b[$1" "$2]=$3;}
- if(NF>3) { b[$1" "$2]=$3" Exclude ["$4"-"$5"]";
- for(i=$4;i<=$5;i++)
- delete a[$1" "i]
- }
- }NR>FNR{
- split($1,c,"[-.]")
- n=c[1]" "(c[2]+0)
- if(n in a) d[c[1]" "a[n]][$4]++ # d[node" "53]["active"] ++ ; d[node" "103]["down"] ++
- }END{for(i in d)for(j in d[i])print i"-"b[i],j,d[i][j]}' conf.ini conf
复制代码 代码还是有问题,对于区间重合的,比如 renderG, 1-202,然后delete 167-181,但下一行167-204,又把167-181这个补回去了,所以要区别key,用NR来标记。
{a[$1" "i" "NR]=$2 ,定义function 看范围在哪个里面
function range(n){
if((n>=1 && n<=166) || (n>=182 && n<=202)) return 4
然后n=c[1]" "(c[2]+0)" "range(c[2]+0)
剩下的都需要改动一下。
|
|