awk split function with regular expression -


i have split line on 2 criterias, did awk , split function.

following sample input

|error|errorhandler|[opname:fulfill][msisdn:123][clienttrxid:[eventid:1][actionid:34]]|failed delivery 

below used parse it

grep errorhandler a.log | awk -f'|' '{split($3,a,"\[(.*?)\]"); print a[1]}' 

i expecting output [opname:fulfill] it's showing whole line

[opname:fulfill][msisdn:123][clienttrxid:[eventid:1][actionid:34]] 

its due last ]].

how can modify regular expression parse below

[opname:fulfill] [msisdn:123] [clienttrxid:[eventid:1][actionid:34]] 

you never need grep awk since awk can useful grep can do. don't know how you'd regexp, i'd count square brackets:

$ cat tst.awk begin { fs="|" } /errorhandler/ {     # identify fields analyzing 1 char @ time     (charnr=1;charnr<=length($4);charnr++) {         char = substr($4,charnr,1)         if ( (char == "[") && (++bracecnt == 1) ) {             fld = ""         }         fld = fld char         if ( (char == "]") && (--bracecnt == 0) ) {             flds[++numflds] = fld         }     }      # print fields     (fldnr=1;fldnr<=numflds;fldnr++) {         print flds[fldnr]     } }  $ awk -f tst.awk a.log [opname:fulfill] [msisdn:123] [clienttrxid:[eventid:1][actionid:34]] 

Comments