最小/最大日付を「エポックからの秒数」に変換し、
MIN=`date --date="$1" +%s`
MAX=`date --date="$2" +%s`
n
各ログ行の最初の単語を同じに変換します。
L_DATE=`echo $LINE | awk '{print $1 $2 ... $n}'`
L_DATE=`date --date="$L_DATE" +%s`
に到達するまで線を比較して捨てますMIN
。
if (( $MIN > $L_DATE )) ; then continue ; fi
に到達するまで行を比較して印刷しますMAX
。
if (( $L_DATE <= $MAX )) ; then echo $LINE ; fi
を超えたら終了MAX
。
if (( $L_DATE > $MAX )) ; then exit 0 ; fi
スクリプト全体minmaxlog.shは次のようになります。
#!/usr/bin/env bash
MIN=`date --date="$1" +%s`
MAX=`date --date="$2" +%s`
while true ; do
read LINE
if [ "$LINE" = "" ] ; then break ; fi
L_DATE=`echo $LINE | awk '{print $1 " " $2 " " $3 " " $4}'`
L_DATE=`date --date="$L_DATE" +%s`
if (( $MIN > $L_DATE )) ; then continue ; fi
if (( $L_DATE <= $MAX )) ; then echo $LINE ; fi
if (( $L_DATE > $MAX )) ; then break ; fi
done
このファイルminmaxlog.inputで実行しました、
May 5 12:23:45 2009 first line
May 6 12:23:45 2009 second line
May 7 12:23:45 2009 third line
May 9 12:23:45 2009 fourth line
June 1 12:23:45 2009 fifth line
June 3 12:23:45 2009 sixth line
このような、
./minmaxlog.sh "May 6" "May 8" < minmaxlog.input