文字列を含むテキストファイルの関連行を別のファイルにコピーします。

文字列を含むテキストファイルの関連行を別のファイルにコピーします。

次の行で継続的に更新されるテキストファイルがあります。

On 29-08-2018 18:30:29:05 bacteria detected 20 Machine learning error 10

など(毎秒ごとに新しい行を受け取ります)。

18:30:29私のC ++プログラムから開始時間と停止時間(形式)を取得します。これは正しいアプローチですか?

string er = "system ./RUN.sh ";
er = er + start + stop;
system(er.c_str()); 

次に、.shファイルで次の操作を行います。

read start
read stop

入力を読むには

次の質問は、ファイルから行を読み取って関連時間を検索し、停止時間が新しいファイルに達するまで行全体をコピーする方法です。

その時点で探していたファイルは新しい場所にコピーされ、更新されず、次に.shが実行されたときにのみ置き換えられます。

アルゴリズムは次のようになります。

if (Log_29-08-2018.txt->readline() contain "18:30:29")
while (RESULT.txt->readline() not contain "20:30:29")
/MINI_LOG/Log_29-08-2018.txt->writeline()
Log_29-08-2018.txt->readline()
done
fi

/MINI_LOG/Log_29-08-2018.txtそして、他の日以外では、次回実行するときにファイルを更新する必要があります。

毎日新しいソースファイルを受け取り、時間が重複しないようにします。

あなたの例を見てみましたが、まさに私は必要ではありませんでした。

ベストアンサー1

は素晴らしいツールです。コードが簡潔でパフォーマンスが良いです。 RUN.shは次のようになります

#!/bin/sh
awk -v start="$1" -v stop="$2" '
    $3 ~ "^"start {p = 1}
    $3 ~ "^"stop  {p = 0}
    p
' logfile > resultfile

おすすめ記事