無限ループ中に受信したデータをファイルに書き込む方法はありますか?私はWebページに表示されるように私の端末にWebコンテンツを表示するスクリプトを持っています。しかし、tee
へのすべての私の試みは、空のファイルをもたらしました。これは、ループを終了することなく、ファイルに何かを書き込む機会がないためです。しかし、私は不要なデータでハードドライブを満たす無限ループについて読んでいます。したがって、コマンドパイプラインからの出力を書くことも可能であるはずです。これがすべてで動作する唯一の理由は、それが受信した後としてもラインの順序を維持しながら、重複行を削除入力を読み込み(私の説明が正確でないなら、私を修正)awk !x[$0]++
コマンドであることを無限ループで受信したデータをファイルに書き込む方法
get_page() {
osascript -e \
'tell application "Google_Chrome" to tell window 1 to tell active tab to execute javascript "document.body.innerText"'
}
while get_page | grep -E '[:alnum:]'
do
sleep 1 &
done < <(get_page) | awk '!x[$0]++'
注意よくそれがなければ、このスクリプトは狂気になるでしょう。
'uniq'のマニュアルページから*入力の繰り返し行が隣接していないと検出されないので、最初にファイルをソートする必要があるかもしれません*質問の中の' awk'コマンドは、注文を複製して保存します。それは私がたくさん使うものです。あなたのソリューションはデータを出力し、 'tee'コマンドも許可しますが、本当にユニークな行だけを出力するには' awk'が必要です。私が理解できないことは、あなたのソリューションを使用し、 'uniq'を' awk'に置き換えると、私の端末や出力ログにデータが出力されないことです。 –
@ user556068あなたは 'uniq'について正しいです。朝早すぎました。ごめんなさい。 'getpage'はそれ自身で標準出力のデータを生成しますか? – Kusalananda
はい、現在ブラウザに表示されているものは何でも生成します。そしてさらにテストすると、 'awk'はパイプラインの最後のコマンドである場合にのみデータを出力します。ですから出力ログに 'tee'してから' awk'を使いますが、これを行うと60秒で3MBの出力ログが生成されます。 –