Bashスクリプト:出力を繰り返すことなく、毎日テキストファイルフォルダを解析します。

Bashスクリプト:出力を繰り返すことなく、毎日テキストファイルフォルダを解析します。

HylaFax は、スプールフォルダに約 1 週間分のファックス転送履歴を保存します。ファイルを繰り返し、ユーザー数とページ数を抽出してログに出力するスクリプトがあります。

ログファイルに重複出力を発生させずに処理されたファイルを移動/変更せずに、毎日フォルダ内のファイルを処理する最も効率的な方法は何ですか?

フォルダの説明:

# ls /var/spool/hylafax/doneq/
q10000 q10001 ... q10010

スクリプト

#!/bin/bash
for i in /var/spool/hylafax/doneq/q*
  do
   user=$(cat $i | grep "mailaddr" | sed 's/mailaddr://g')
   pgs=$(cat $i | grep "npages" | sed 's/npages://g')
      echo "$i $user - $pgs pages" >> /scripts/log_output.txt
done

ベストアンサー1

頼む

ログファイルに重複出力を発生させずに処理されたファイルを移動/変更せずに、毎日フォルダ内のファイルを処理する最も効率的な方法は何ですか?

これを達成する1つの方法は、処理されたファイルのソートされたリストを保存することです。comm候補ファイルのリストとして処理すると、重複エントリが削除されます。

技術の例として、次のようなものが正しい形式のファイル名(HylaFaxで生成された名前など)を処理するための基礎として使用できます。

find * -print | sort > /tmp/current_files

test -f /tmp/previous_files || { echo "Come back tomorrow"; exit 0; }
comm -13 /tmp/previous_files /tmp/current_files > /tmp/new_files

# ... Process entries in /tmp/new_files ...

mv -f /tmp/current_files /tmp/previous_files

おすすめ記事