Bashスクリプトで変数ファイル名でファイルを呼び出す

Bashスクリプトで変数ファイル名でファイルを呼び出す

1と2の多くの文字列を含むAというソースファイルがあり、その内容が定期的に自動的に変更され(1と2の新しい文字列が追加されます)、このファイルに対してgrepを実行して「1」を変更するとします。 。文字列は次のとおりです。 B.という別のファイルに抽出されました。

grep '1' A > B

次のgrep操作は、Aの内容をBにgrepするだけでなく、新しい文字列(および新しい文字列のみ)を別のファイルに抽出するためにBとAを比較する必要があります。これを繰り返す必要があります。これを行うには、Aの更新内容を含む「1」文字列を使用して新しいファイルCを作成し、それをBと比較し、Dという新しいファイルに違いを抽出します。

grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
sleep 60
done &

問題は、BがAの古いgrepであるため動作しないことです。したがって、次回 C を実行すると、更新されなかった以前の B とのみ比較されます。また、Dは毎回上書きされます。

毎回最後のBのコピーを保持するようにスクリプトに指示できる必要があるため、Aは常に以前のバージョンと比較され、Cは常に現在のAと前の最後のBの間の違いを示します。以前のバージョンのCを別の場所にコピーするので、維持する必要はありません。

私は変数ファイル名を使用する必要があると思い、BとCのファイル名に$(date)変数を追加しようとしましたが、grepがそれを認識しなかったのでうまくいかないようです(各実行スクリプト間で日付が変更されるため)。 。

PS:新しい内容だけが考慮されるように、各実行の間にAの内容を削除して、変数名と2番目のgrep操作を必要としない解決策を見つけました。私はまだbashスクリプトから変数ファイル名を呼び出す方法を学びたいです。

PS2:私は携帯電話で書いているので、bashスクリプトを正しくコーディングする方法がわかりません。

ベストアンサー1

単にBを交換したらどうでしょうか?

grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
cat C >> B   ####
sleep 60
done &

これにより、D1の最後の60秒しか得られませんA

おすすめ記事