入力が終わらないときにawkでEND {}を使用する方法は?

入力が終わらないときにawkでEND {}を使用する方法は?

tail -f ./somefileコマンドへの入力などのコマンドを使用しているとしますawk。 awkを使用して| wc -lコマンドの最後でaを実行するのと同じように、一致を合計したいのですが、入力は受信され続けます... AWKが入力を合計すると、コマンドEND{}の一部と一緒に表示されます。それでも入力を受けており、END{}コマンドの対応する部分は実行されません。では、コマンドawkから入力を受け取るにはどうすればよいですか?代わりに、コードスニペットで使用できるtail -f ./somefile繰り返しメカニズムはありますか?awkEND{}

ベストアンサー1

「一致」が正確にどのように機能するかは言及していないので、ルールに一致する行が数を増やすと仮定し/pattern/ {}ます。

コマンドの最後で a を実行するawkなど、 を使用して常に一致を合計したいと思います。| wc -l

入力が無限大なら、増加するたびにカウントを表示したいでしょうか?

END {}デフォルトでは、この場合はルールを使用しないでください。次のAWKプログラム例のようにインクリメントするカウンタを印刷します。

# Initializer
BEGIN {
    counter=0;
}

# Pattern A
/^COUNT$/ {
    ++counter;
    print counter;
}

# Pattern B
/^HERE$/ {
    ++counter;
    print counter;
}

このプログラムは、入力に1行が表示されるたびに計算し、カウンタ値を表示しますCOUNTHERE

一致させるパターンが多く、コードの重複を最小限に抑えたい場合は、次のようにします。AWK機能計算と表示を1つのタスクにまとめます。

# Initializer
BEGIN { counter=0; }

# Count and Display Function
function count() {
    ++counter;
    print counter;
}

# Pattern A
/^COUNT$/ { count(); }

# Pattern B
/^HERE$/ { count(); }

スクリーンショット(上記の両方のプログラムは同じ出力を提供します):

おすすめ記事