AWKファイルに範囲を挿入する

AWKファイルに範囲を挿入する

CLIに渡されると、AWK範囲の多数の例が見つかりました。たとえば、

awk '/start/,/end/' file

AWKファイルに範囲を含める方法は?

#!/usr/bin/awk -f

BEGIN{
}
{
   # how do I express those "start" and "end" ranges?
}
END {
}

私のテキストファイルは次のとおりです。

...
don't care
don't care
start
record of interest
record on interest
...
end
don't care
don't care
...

ベストアンサー1

awkスクリプトの本文には次の形式があります。

*pattern* *action*

これらのうちの1つは省略できます。省略模様平均行動常に実行されます。省略行動デフォルトでは、現在の行が印刷されます。

範囲を表現する自然な方法は次のとおりです。模様部分は次のとおりです。

BEGIN {
  somevar=5
}

/start/,/end/ { print }

END {
  somevar=6
}

(開始時と同じ構造を維持するために、BEGINおよびENDセクションをそのままにしています。)

〜にある行動場所を追跡するために必要なものは次のとおりです。

BEGIN {
  p=0
}

{
  if (/start/) p=1
  if (p) { print }
  if (/end/) p=0
}

END {
  p=0
}

ここではない模様だから、行動ブロックは各行に対して実行されます。 /に一致する行が表示されたら、pフラグ()を1または「true」に設定します。/startフラグがtrueの場合にのみその行を印刷します。 /が表示された場合、/endフラグはリセットされます。 BEGINとENDブロックは重複しており、awkのデフォルト値は0 / falseです。

おすすめ記事