techie11
techie11

Reputation: 1387

syntax error with awk print

for a text like the following:

std_out_file: ${ALGO_TOP}/dynamic/batchlog/JS030003-ara.stop.badb.out

I want the output to be:

$BATCHLOG_DIR/JS030003-ara.stop.badb.out

here is the code:

nawk '/std_out_file:|std_err_file:/ { split($2, a, /); if ( a[3]=="batchlog" ) print "$$BATCHLOG_DIR/"$3; else print "$$CONSOLELOG_DIR/"$3; }'

I got the following error:

nawk: illegal primary in regular expression ); if ( a[3]=="batchlog" ) print "$$BATCHLOG_DIR at ; if ( a[3]=="batchlog" ) print "$$BATCHLOG_DIR
 source line number 4
 context is
        /std_out_file:|std_err_file:/ { split($2, a, /); if ( a[3]=="batchlog" ) print "$$BATCHLOG_DIR/", $3; else print >>>  " <<<

where did I get it wrong?

Upvotes: 0

Views: 544

Answers (1)

jaypal singh
jaypal singh

Reputation: 77155

The third argument of split function is a regex. You should place your / inside split function like:

split($2, a, /\//)

Notice that / needs to be escaped to let awk know that is it not start or end of the regex pattern.

Having said that, you can avoid the split altogether by setting the delimiter to /. Something like:

awk -F'/' '/std_out_file:|std_err_file:/{print ($(NF-1)=="batchlog" ? "$BATCH" : "$CONSOLE") "LOG_DIR/"$NF}' file

Where you test the second last field $(NF-1) to be batchlog. The ternary op is basically doing the same thing as your if-else condition.

Upvotes: 3

Related Questions