I understand that it can be done with array, but not able to use logic with same.
Column 2 will not contain any negative value, in fact it will be always greater than 0.
awk -v THRSTR="600 1800" '
BEGIN {n = split (THRSTR, THR)
}
{for (i=1; i<=n; i++) {if ($2 <= THR) break
}
RES[$1,i]++
}
END {for (r in RES) {split (r, T, SUBSEP)
print T[1], "[" THR[T[2]-1] "-" THR[T[2]] "] = " RES[r]
}
}
' file
a [-600] = 2
a [600-1800] = 1
a [1800-] = 1
b [-600] = 2
b [600-1800] = 1
b [1800-] = 1
Your request leaves open where to count the exact boundary values - here I count them to the lower interval, i.e. 600 goes to 0 - 600, 601 to 600 - 1800.
EDIT: Oh, I see that your code snippet handles it vice versa. Exercise for you to adapt the proposal . . .