2017-07-27 17 views
1

質問の最初の部分には2つのパターンの間に線が印刷されています。例えば:2つのパターンの間にラインを印刷し、1秒間スリープしてからEOFまで繰り返す

awk '/start/{flag=1} flag; /end/{flag=0}' file 

これは、「ファイル」内に複数回発生する「開始」及び「終了」のパターンとの間の行を印刷します。ファイルが含まれているとします。

start a b c d 4 5 3 7 8 end some garbage start 6 d 0 0 1 d g end other garbages start 6 5 ... end some other garbage 

罰金ですが、私がしたいことは、このような各チャンク間の休止である上記「AWK」ゴミを排除し、ファイル全体アウトコマンドを印刷..ファイルの最後までように

start 6 d 0 0 1 d g end 

と:それは、次のチャンクを印刷する第二使用することができる(sleep 1)の印刷

start a b c d 4 5 3 7 8 end

睡眠です。私は広範囲に調査しましたが、2番目の「一時停止/待機」の部分を見つけることができなかったので、これは重複した質問ではないと私は信じています。マルチチャーRSのためのGNU AWKで

+1

awkスクリプトがあなたの言うことをしていると確信していますか? – JNevill

+1

明確にするために、サンプルデータがあれば私にとってはうまくいかず、forループを使わないとレコードのフィールドを繰り返すことができません。 forループが実装されている場合、 '/ END /'のテストでループが次のフィールドに来る前に 'system(" sleep 10 ")'を実装することができます。しかしそれは、スクリプトが想定していたことをするように見えないため、疑問な点です。 – JNevill

+0

@JNevill実際にあなたが正しいです、それはファイル全体を印刷します。しかし、とにかく私はそのawkコマンドには興味がありません。それは単なる例です。私が質問したいのは、私が質問したことです。 – quanta

答えて

1

:変数名がフラグとしてfound又は同様に意味のある単語ではなく、flagあることが

$ cat tst.awk 
BEGIN { RS="[[:space:]]+"; ORS=" " } 
/start/ { found=1 } 
found { print } 
/end/ { printf "\n"; found=0; system("sleep 1") } 

$ time awk -f tst.awk file 
start a b c d 4 5 3 7 8 end 
start 6 d 0 0 1 d g end 
start 6 5 ... end 

real 0m3.214s 
user 0m0.015s 
sys  0m0.122s 

メモは、それが、ではない変数の種類が何であるか、それをを表す。フラグ変数flagに名前を付けることは、またはsumの代わりに整数変数integerの名前を付けることと似ています。

awk ... | while read -r line ; do 
    echo "${line}" 
    sleep 1 
done 

各スリープ動作のための余分なシェルを起動しないようになります。

+0

こんにちは、それはまだすべてを1つの場所にプリントします!私はこれらの2つのパターン(開始と終了)に一致するものを望み、1つのそのようなブロックを印刷し、1秒間停止してから次のブロックを見つけます。 – quanta

+0

いいえ、そうではありません私の答え。あなたは別の経験をしている場合、あなたの実際の入力があなたの投稿された入力と一致しないか、gawkを使用していません。 –

1

EdMortonにより示唆されるようsystem("sleep 1")を使用する代わりに、bashのwhileループにパイプのawkの出力になります。

+0

"start"と "end"というパターンはどこにも使われていませんが、少なくとも1行は出力されているので便利です。 IFS = ''読み取り-r行|| [[-n "$ line"]]; do echo "$ line" sleep 1 <"$ 1" 'ありがとう。 – quanta

+0

私が言ったのは、EdMortenのawkスクリプトを使って、 'system(" sleep 1 ")'をそれから削除し、それをwhileループにパイプすることです。しかしそれはほんの少しの最適化です。 EdMortenからの答えはあなたのために働くはずです。 – hek2mgl

関連する問題