2つのファイルを比較し、違いがある場合はスクリプトを実行します。

2つのファイルを比較し、違いがある場合はスクリプトを実行します。

テキスト変換用のシェルスクリプトがありますが、使用するのは面倒で、手動の判断と実行に依存します。仕組みは次のとおりです。

ステップ1:生データテキストをダウンロードします。

wget http://example.com/raw.txt

ステップ2:最後にダウンロードしたファイルの内容を手動で比較して違いを確認します。

テキストのコンテンツ形式は、1行と1文字で比較的簡単です。コンテンツが増えたら、スクリプト処理を実行する必要があります。

# Last downloaded file content:
wtKpjv
uJlQm1
iS86aE
Hk6ycS
hAYj7k

# Now downloaded file content:
wtKpjv
uJlQm1
RiU8iM
iS86aE
Hk6ycS
qyDNaZ
hAYj7k

# Compare the increased content:
RiU8iM
qyDNaZ

ステップ3:比較結果に違いがある場合は、スクリプト処理を実行する必要があります。

./text_processing.sh raw.txt > new.text

上記は現在のステップです。このプロセスを完了するために自動化されたタスクをどのように設定しますか?

毎日確認したいです。テキストの内容が更新されたら、すぐにスクリプトを実行する必要があります。変更がない場合、スクリプトは3日ごとに実行されます。

誰でも私を助けることができればとても感謝します。

ベストアンサー1

あなたの質問は、あなたが要求するものについて少しあいまいです。

違いのみを確認するには、cmp -s oldfile newfileファイルが同じ場合は.willを使用して真の状態で終了します。

if cmp -s oldfile newfile
then echo files are the same
else echo files are different
     ./text_processing.sh ...
fi

ファイルサイズが増加するかどうかを確認するには、wc -c(文字を受け入れる)、(行を受け入れるwc -l)を使用するか、stat --format=%sファイルのメタデータを直接使用して合計サイズをバイト単位で指定できます。

if [ $(wc -c oldfile) -lt $(wc -c newfile) ]
then echo oldfile is smaller
     ./text_processing.sh ...
fi

$( ... )付属のコマンドを実行し、出力をコマンドラインに置き換えます。[ ... -lt ... ]最初の引数が次のようにテストされます。エース比較する第二の主張。

行が追加されたことを具体的に確認する場合は、最良の戦略は、2つのファイルを最初にソートしてから、次を使用してcomm共通行をフィルタリングすることです。

sort -o oldfile.sorted oldfile
sort -o newfile.sorted newfile
if [ $(comm -13 oldfile.sorted newfile.sorted | wc -l) -gt 0 ]
then echo 'line(s) only found in newfile'
     ./text_processing.sh ...
fi

comm -13両方のファイルの行を一致させます。通常、各行は、その行が最初のファイルにのみ表示されるのか、2番目のファイルにのみ表示されるのか、それとも両方に表示されるのかを示すために、インデントで出力されます。最初のファイルの行と共通の行だけが抑制されるため、-132番目のファイルに表示される行のみが出力されます。wc -l行数を計算し、ゼロより大きいテストを実行するようにパイプされます。

変更された行は、最初のファイルでのみ1行として表示され、2番目のファイルでは別の行として表示されます。

おすすめ記事