arrays - Search pattern and print hits lower than threshold -



arrays - Search pattern and print hits lower than threshold -

here illustration need:

input:

a 5 7 11 b 10 b 11 b 12 . . .

output:

a 2 b 0

so on output should hits lower threshold (in case $2 < 10).

my code is:

awk 'ofs="\t" {v[$1]+=$2; n[$1]++} end {for (l in n) {print l, n[l]} }' input

and output

a 3 b 3

i not sure set status $2 < 10.

you can check threshold status $2 < value, value awk variable given -v value=xx.

also, using v[$1]+=$2: sums, not counts matching cases.

all together, utilize this:

awk -v t=10 '{list[$1]} $2<t {count[$1]++} end {for (i in list) print i, count[i]+0}' file

note need utilize 2 arrays: 1 maintain track of counters , 1 maintain track of possible values.

explanation -v t=10 provide threshold. {list[$1]} maintain track of possible first fields appearing. $2<t {count[$1]++} if 2nd field smaller threshold, increment counter. end {for (i in list) print i, count[i]+0} finally, loop through first fields , print number of times had value lower threshold. count[i]+0 trick makes print 0 if value not set. test $ awk -v t=10 '{list[$1]} $2<t {count[$1]++} end {for (i in list) print i, count[i]+0}' a 2 b 0

arrays awk count

Comments

Popular posts from this blog

Delphi change the assembly code of a running process -

json - Hibernate and Jackson (java.lang.IllegalStateException: Cannot call sendError() after the response has been committed) -

C++ 11 "class" keyword -