一度に数か月分のログ エントリを含む大きなログ ファイルを分割しようとしています。また、ログ ファイルを日付ごとに分割しようとしています。次のように何千もの行があります。
Sep 4 11:45 kernel: Entry
Sep 5 08:44 syslog: Entry
ファイル logfile.20090904 と logfile.20090905 にエントリが含まれるように分割しようとしています。
各行を読み取って適切なファイルに送信するプログラムを作成しましたが、実行がかなり遅くなります (特に、月の名前を数値に変換する必要があるため)。ファイル内の最初の日付を見つける必要がある毎日のgrepを実行することを考えましたが、それも遅いようです。
より最適なソリューションはありますか? たぶん、よりうまく機能するコマンドラインプログラムがありません。
これが私の現在の解決策です:
#! /bin/bash
cat $FILE | while read line; do
dts="${line:0:6}"
dt="`date -d "$dts" +'%Y%m%d'`"
# Note that I could do some caching here of the date, assuming
# that dates are together.
echo $line >> $FILE.$dt 2> /dev/null
done