LoginSignup
0
1

More than 5 years have passed since last update.

【初心者】1年間の日にちを返すshll script

Last updated at Posted at 2018-04-20

 
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みたいな表記になります。

0
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1