2017年の1月1日から3月31までの日にち文字列(ex:20170401)を
順番に返すshell scriptです。
昔作ったものですが、何かの役に経てば幸いです。
shell script
test.sh
を作成します
test.sh
#!/bin/sh
day=1
month=1
while [ ${month} -le 12 ]
do
case ${month} in
1) END=31 ;;
2) END=28 ;;
3) END=31 ;;
4) END=30 ;;
5) END=31 ;;
6) END=30 ;;
7) END=31 ;;
8) END=31 ;;
9) END=30 ;;
10) END=31 ;;
11) END=30 ;;
12) END=31 ;;
esac
while [ ${day} -le ${END} ]
do
if [ ${day} -le 9 ]
then
DAY=0${day}
else
DAY=${day}
fi
if [ ${month} -le 9 ]
then
MONTH=0${month}
else
MONTH=${month}
fi
DATE=2017${MONTH}${DAY}
echo ${DATE} ###DATEを表示
day=`expr ${day} + 1` ###dayに1を加算
done
day=1
month=`expr ${month} + 1` ###monthに1を加算
done
上記では、日にち文字列となる変数DATEを表示(echo ${DATE}
)するだけの処理ですが、
少し改造すれば「一年分のlogファイルに対して同じ処理を行う」時に効率性が上がります。
※logファイル名に日にちの文字列が含まれている必要はあります。
例えば、logファイル命名規則がsample_2017MMDD.txt
であった場合、
echo ${DATE}
の行を
cat sample_${DATE}.txt|grep "versions" > versions_${DATE}.txt
に置き換えると、文字列"versions"
でgrepしたファイルを日毎1年分作成することができます。
他にも、1列目が日にち、2列目が各日のlogファイルの行数を表すcsvファイルを作成したい場合、
echo ${DATE},`cat sample_${DATE}.txt|wc -l` >> sample.csv
sample.csvをエクセル等で開き、グラフ化すれば一年分のlogの吐き出し量の傾向がサクッと見られます。
終わりに
作成したscriptですが、もっと楽な(スマートな)書き方もある気がしますね。
ちなみに、DATE=2017/${MONTH}/${DAY}
とすれば、2017/04/01みたいな表記になります。