$ cat tst.awk $2 == "*" { buf[++bufSz] = $0 next } bufSz > 0 { split(prev,p) rng = prev[2]p[2] ":" $2 val = (prev[3]$3 + $3p[3]) / 2 for (i=1; i<=bufSz; i++) { split(buf[i],flds) print flds[1], rng, val } split($0,prev) bufSz = 0 } { print prev = $0 } END { for (i=1; i<=bufSz; i++) { print buf[i] } }
$ awk -f tst.awk file 1 192.168.200.2 1 2 192.168.200.1 1 3 10.10.10.1 1 4 11.22.33.44 2 5 11.22.33.55 5 6 11.22.33.55:11.22.44.66 7 7 11.22.44.66 9 8 11.22.44.66:8.8.8.0 17 9 11.22.44.66:8.8.8.0 17 10 8.8.8.0 25 11 * # 12 * # 13 * #