1

以下のスクリプトのようなスクリプトで「何らかの作業」を行っているときに、gawk の行をフラッシュ/無視する方法を見つけようとしています。

BEGIN{
c = 1
}
$0 ~ /test/{
if(c == 1){
c = 0
system("sleep 3")
print "up"
c = 1
}
}

入力:

>gawk -f test.awk
test
test
test
up 
up
up

「仕事をしている」ときにパターンに一致する行を無視し、完了後に最初の行の処理を開始するように gawk に指示する方法はありますか? 現在はバッファリング中であり、完了すると「入力バッファ」内の行の処理を開始しますが、それらの行は無視する必要があります。

4

1 に答える 1

1

入力バッファは、AWK スクリプトの制御を超えています。

最初の行が読み取られた後、スリープがトリガーされ、スリープが終了した後、入力の次の行が読み取られます。睡眠が起こっていました。

私が C で見た中で最も近いのは、低レベルのノンブロッキング読み取りを実行して、各スリープ後にすぐに利用できるすべての入力を消費することです。

于 2012-12-14T23:27:37.190 に答える