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です。
答え2
oot@localhost ~]# i=`awk '/care/{print NR}' l.txt| sort -nr| sed -n '1p'`
[root@localhost ~]# awk -v i="$i" '/care/{x=NR+i}(NR<=x){print }' l.txt
don't care
don't care
start
record of interest
record on interest
...
end
don't care
don't care
...