一定期間が経過すると、常に更新(新しい行を追加)するログファイルがあります。
10分ごとにファイルからエラーメッセージのみが受信されます。
最初はすべての行を新しいファイルに抽出し、「ERROR FOUND」一致パターンを使用しました。アッ。
しかし、10分後にログファイルに新しい行が追加されるので、ログファイルを残した場所から読みたいと思います。最初から始めたくありません。
誰でも私に最高のコードやスクリプトを提案できますか?
ベストアンサー1
次のファイル記述子でファイルを開くと:
exec 3< /path/to/log/file
その後、処理できます。
awk '...' <&3
awk
その後、fd 3は左の位置を指します。
10分後、同じシェル呼び出しで次のコマンドを実行できます。
awk '...' <&3
新しいデータを処理するためにコマンドを再発行します。
別のシェル呼び出しで読み取りを再開できるように現在位置を保存するには、ksh93
次のようにします。
#! /usr/bin/env ksh93
file=/path/to/some-file
offset_file=$file.offset
exec 3< "$file"
[ -f "$offset_file" ] && exec 3<#(($(<"$offset_file")))
awk '...' <&3
echo "$(3<#((CUR)))" > "$offset_file"
またはzshを使用してください。
#! /usr/bin/env zsh
zmodload zsh/system
file=/path/to/some-file
offset_file=$file.offset
exec 3< $file
[ -f "$offset_file" ] && sysseek -u 3 "$(<$offset_file)"
awk '...' <&3
echo $((systell(3))) > $offset_file