私はawk
を使用して、出力ファイルの入力ファイルをフォーマットしています。私は変数を埋めるためにいくつかのパターンを持っています(この例では "some pattern"のように)。これらの変数は、ブロックEND
に必要な形式で出力されます。入力ファイルの出現順序は保証されていないため、出力ファイル内の順序は常に同じでなければならないため、出力はそこで行われなければなりません。awk:ENDブロック内にexitをキャッチ
BEGIN {
FS = "=|,"
}
/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}
END {
# Output the variables
print var
}
私の問題はパターン内のexit
ステートメントです。何らかのエラーがあり、このコマンドが呼び出された場合は、エラーメッセージがまったく出力されません。しかし、gawkのマニュアル(here)によれば、コマンドがパターンブロックで呼び出されると、END
ブロックが少なくとも実行されます。
if (!exit_invoked) {
print var
}
またはEND
ブロックで出力を印刷しないようにする他の方法:のようなexit
をキャッチする方法はありますか?
ステファン
編集:はshellterからソリューションを使用します。
この単純な解決策については考えていない;)私は 'exit_invoked'セットを忘れないようにするためにこれをパックするだろう。 Stefan – Stefan
@Stefan:いい考えです。あなたがその変数を使用していることを思い出させるために、BEGINブロックに設定することができます。つまり、exit_invoked = 0です。不必要で冗長であると不平を言う人もいます。私はそれを自分ではしませんが、それは良い自己記録技術者です。 YRMV。がんばろう。 – shellter
私は自分自身のために 'awk'プログラムを書いていないので、これを行うでしょう。ありがとう。 – Stefan