0

次の awk コマンドを理解する方法は?

nawk 'a-- >= 0; /datamart_extractrelations_static/ {a = 30}' app.log

awk プログラムの形式は次のとおりです。

pattern { action }

「a-- >= 0」は何をしますか? この操作はいつ実行されますか?

4

2 に答える 2

3

コマンドは次と同じです。

nawk 'a-- >= 0 {print}; /datamart_extractrelations_static/ {a = 30}' app.log

Ifは、アクションが指定されていない場合に実行されるデフォルトのアクションであるa-- >= 0 awkため、現在の行を出力します。printawk

その結果、コマンドは、パターンを含む行の 30 番目の行を出力します。datamart_extractrelations_static

これをよりよく理解するには、次のコマンドを試してみてください。

awk '1' input

1常に評価されるため、trueデフォルトのアクションはprint awk入力のすべての行を変更せずに出力します。

于 2015-04-17T15:31:25.277 に答える
1

入力に ​​datamart_extractrelations_static が見つかった後、30 行を出力するイディオムを正しく理解していない人がいます。正しいコードについては、一致するパターンに続く行を sed または awk で印刷するを参照してください。あなたが投稿したコードには、巨大なファイルの場合に var がゼロ以下に減少し続け、最終的にラップアラウンドして再び正のように見えないことを確認するための主要なテスト (カウント変数aに名前を付ける人???) がありません。a

于 2015-04-17T15:57:33.807 に答える