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
Post a Comment