0

对于如下文本:

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

我希望输出为:

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

这是代码:

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

我收到以下错误:

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 >>>  " <<<

我哪里弄错了?

4

1 回答 1

3

函数的第三个参数split是一个正则表达式。你应该像这样放置你的/内部split函数:

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

请注意,/需要转义以awk告知它不是regex模式的开始还是结束。

话虽如此,您可以split通过将分隔符设置为/. 就像是:

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

您测试倒数第二个字段$(NF-1)的位置batchlog。三元运算基本上与您的if-else条件相同。

于 2014-05-25T04:20:23.983 回答