
tail -f ./somefile
コマンドへの入力などのコマンドを使用しているとしますawk
。 awkを使用して| wc -l
コマンドの最後でaを実行するのと同じように、一致を合計したいのですが、入力は受信され続けます... AWKが入力を合計すると、コマンドEND{}
の一部と一緒に表示されます。それでも入力を受けており、END{}
コマンドの対応する部分は実行されません。では、コマンドawk
から入力を受け取るにはどうすればよいですか?代わりに、コードスニペットで使用できるtail -f ./somefile
繰り返しメカニズムはありますか?awk
END{}
答え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行が表示されるたびに計算し、カウンタ値を表示しますCOUNT
。HERE
一致させるパターンが多く、コードの重複を最小限に抑えたい場合は、次のようにします。AWK機能計算と表示を1つのタスクにまとめます。
# Initializer
BEGIN { counter=0; }
# Count and Display Function
function count() {
++counter;
print counter;
}
# Pattern A
/^COUNT$/ { count(); }
# Pattern B
/^HERE$/ { count(); }
スクリーンショット(上記の両方のプログラムは同じ出力を提供します):