指定した項目の値を指定した行数ずらして出力する。 例えば、日別の株価データにおいて収益率(当日の株価/前日の株価)を計算するなど レコード間の演算を行いたい場合に利用する。
Table 3.27: 入力データ
Table 3.28: f=val:nextVal
Table 3.29: f=val:nextVal -r
Table 3.30: f=val t=2
|
Table 3.27に示される入力データは日別の集計値が4日分示されており、 スーパーの売上推移や株価推移と考えればよい。 この入力データについて、 日々の増加率(ここでは簡単のために「増加率=翌日の値/当日の値」とする) を計算することを考える。 入力データに示される日付4/6〜4/9について、 それぞれの日の値(val)を1行上にずらし、 新しい項目(newVal)として出力した結果がTable 3.28に示されている。 この出力結果に対してmcalコマンドでnextVal/valを計算すれば増加率が求められる。 ちなみに、4/9の行が消えているのは、4/9の行の次の行が存在しないからである。 存在しない時も-nオプションを指定することでNULL値を出力することができる。
Table 3.28は、下の行の値を上にずらしたが、-rオプションを指定することで、 逆に(上の行の値を下に)ずらすことも可能である(Table 3.29)。 さらに、t=を指定することで、スライドの回数を指定することもできる。 t=2で実行した結果をTable 3.30に示している。 これは "mslide f=val:val1 | mslide f=val1:val2"のように、 mslideを複数回実行するのと同じ効果がある。 なお、t=を指定した場合、新たに出力される項目名は、 f=で指定した項目名に、1から始まる連番が付与されたものとなる。 またt=と-lを併用することで、最後にずらした結果のみを出力することも可能である。
mslideの機能はmwindowによく似ている。 mslideはレコード間の演算を項目演算として実現し、 一方で、mwindowはレコード間演算を行集計として実現している。 よって、mslideした後の演算はmcalやmselが主役となり、 一方でmwindowしたのちはmsumやmavgなどのデータ集約のコマンドが主役となる。
mslide f= [s=] [k=key] [t=] [-r] [-n] [-l] [i=] [o=] [-assert_diffSize] [-assert_nullkey] [-assert_nullin] [-assert_nullout] [-nfn] [-nfno] [-x] [-q] [tmpPath=] rverb|[–help]| rverb|[–helpl]| [--version]
f= |
ずらす対象となる項目名を指定する。複数項目指定可能。 |
t=を指定しないときは、コロンに続いて窓キーの項目名を指定しなければならない。 |
|
s= |
ここで指定した項目(複数項目指定可)で並べ替えられた後、行をずらす。 |
-qオプションを指定しないとき、s=パラメータは必須。 |
|
k= |
ここで指定された項目の値を単位に処理する。 |
t= |
ずらす回数を指定する。省略すればt=1が設定される。 |
-r |
逆方向に(上の値を下に)ずらす。 |
-n |
次(前)の行がなくてもNULL値を出力する。 |
-l |
最後にずらした結果のみを出力する。 |
$ more dat1.csv date,val 20130406,1 20130407,2 20130408,3 20130409,4 $ mslide s=date f=val:newVal i=dat1.csv o=rsl1.csv #END# kgslide f=val:newVal i=dat1.csv o=rsl1.csv s=date $ more rsl1.csv date%0,val,newVal 20130406,1,2 20130407,2,3 20130408,3,4
$ mslide s=date f=val:newVal -r i=dat1.csv o=rsl2.csv #END# kgslide -r f=val:newVal i=dat1.csv o=rsl2.csv s=date $ more rsl2.csv date%0,val,newVal 20130407,2,1 20130408,3,2 20130409,4,3
$ mslide s=date f=val t=2 i=dat1.csv o=rsl3.csv #END# kgslide f=val i=dat1.csv o=rsl3.csv s=date t=2 $ more rsl3.csv date%0,val,val1,val2 20130406,1,2,3 20130407,2,3,4
$ mslide s=date f=val t=2 -l i=dat1.csv o=rsl4.csv #END# kgslide -l f=val i=dat1.csv o=rsl4.csv s=date t=2 $ more rsl4.csv date%0,val,val2 20130406,1,3 20130407,2,4
$ mslide s=date f=date:d_,val:v_ t=2 i=dat1.csv o=rsl5.csv #END# kgslide f=date:d_,val:v_ i=dat1.csv o=rsl5.csv s=date t=2 $ more rsl5.csv date%0,val,d_1,d_2,v_1,v_2 20130406,1,20130407,20130408,2,3 20130407,2,20130408,20130409,3,4