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

functionの 3 番目の引数はsplit正規表現です。/内部split関数を次のように配置する必要があります。

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

パターンの開始または終了ではないこと/を知らせるためにエスケープする必要があることに注意してください。awkregex

splitそうは言っても、区切り文字を に設定することで、完全に回避できます/。何かのようなもの:

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

$(NF-1)最後から 2 番目のフィールドが であることをテストする場所batchlog。三項演算は基本的にあなたの条件と同じことをしていますif-else

于 2014-05-25T04:20:23.983 に答える