xselnum

fieldで指定した項目の値がrangeで指定した数値範囲条件にあてはまる行を選択する。

rangeの指定は"From_To"の形で与えられる。Fromが以上条件でToが以下条件である(「以上」、「以下」であり「より大きい」、「より小さい」ではない)。例えば、"range=100_200"は「100以上かつ200以下」を意味する。

"_"を省略して数値のみが指定されたときはその数値に一致する行を選択する。

FromとToの値として小数点やマイナス数値の指定も可能である。例えば、"range=-10_20.5"は「−10以上かつ20.5以下」を意味する。

FromもしくはToを省略することによって、「To以下」もしくは「From以上」といった単一の条件を指定することができる。例えば、"range=_100"は「100以下」を意味し、"range=100_"は「100以上」を意味する。もちろん、"range=_"といった指定も可能であるが、現在のところ特別有用な意味は見出せない。

条件を複数指定することも可能である。複数指定した場合、それらはOR条件として扱われる。複数条件は","(カンマ)で区切らなければならない。例えば、"range=-10_-5,5_10"は「(−10以上かつ−5以下)もしくは(5以上かつ10以下)」を意味する。

fieldで指定する項目の数は一つだけである。例えば、"field=3,4,5"といった指定は無効である。

xselnumとxdelnumの関係をvalueに指定したカンマで区切られた複数条件について示しておく。各条件をABCとすると、xselnumは「AorBorC」でxdelnumは「not(AorBorC)=(notA)and(notB)and(notC)となる。

制限:valueで指定できる数値範囲の数は255個以下である。

(開発者弁)当初は、範囲指定に"~"(チルダ)を使う計画であったが、チルダはUNIXにおいてホームディレクトリを意味する特殊文字のため、いちいちエスケープする必要が生じる。そこで不本意ながら"_"(アンダーバー)を使うことにした。 

xdelnum

xselnumで選択されない行が選択される(xselnum参照)。 

xselstr

fieldで指定した項目の値がstringで指定した文字列に一致する行を選択する。

条件を複数指定することも可能である。複数指定した場合、それらはOR条件として扱われる。複数条件は","(カンマ)で区切らなければならない。例えば、"string=abc,xyz"は「abcもしくはxyzに一致」を意味する。

valueで指定する文字列の中にshellが特殊文字として解釈する文字("!","*","?"など)が含まれる場合は、エスケープ文字を使うことによって(例えばbashであればシングルクォーテーションによって文字列をくくる)そのshellに解釈させないようにしなければならない。

現在のところ、","を含む文字列を条件として与えることはできない。

fieldで指定する項目の数は一つだけである。例えば、"field=3,4,5"といった指定は無効である。

valueで指定する項目が多い場合はxselmstを利用すればよい。

xselstrとxdelstrの関係をvalueに指定したカンマで区切られた複数条件について示しておく。各条件をABCとすると、xselstrは「AorBorC」でxdelstrは「not(AorBorC)=(notA)and(notB)and(notC)となる。

制限:valueで指定できる文字列の数は255以下である。 

xsel#

xdel#で選択されない行が選択される(xdel#参照)。 

xdel#

#で始まる行もしくは空白行を除外選択する。

Xコマンドでは#で始まる行と空白行を特殊扱いするため、他のUNIXコマンドなどを直接利用すると不具合が生じる可能性がある。そこで、このコマンドは、このようなXコマンド特殊のデータ構造を除外する。 

xdelnum

xselstrで選択されない行が選択される(xselstr参照)。 

xselmst

keyで指定した項目の値が、masterで指定したマスターファイルの第一項目に存在する行を選択する。keyを複数個指定すれば、マスターファイルの最初の項目から順番に対応して比較される。例えば、"key=3,2"を指定すれば、入力ファイルの第三項目とマスターファイルの第一項目、そして入力ファイルの第二項目とマスターファイルの第二項目がそれぞれ比較され、両方とも一致する行が選択される。

入力ファイル、マスターファイルともに、比較される項目でそれぞれソートされている必要がある。 

xdelmst

xselmstで選択されない行が選択される(xselmst参照)。 

xselnul

fieldで指定した項目の値がnull値である行を選択する。具体的な処理で言えば、第一文字目が"*"である行を選択する。

fieldで複数項目が指定された場合、そのいずれかの項目でnull値が見つかれば選択される(すなわちor条件となる)。 

xdelnul

xselnulで選択されない行が選択される(xselnul参照)。 

xselkeystr

keyで指定した項目値が同じ複数行に対して、fieldで指定した項目の値がstringで指定した文字列に一行でも一致すればそれらの複数行を全て選択する。

xselstrが単一行を対象としているのに対して、xselkeystrではkeyの値が同じ複数行を対象としている。それ以外はxselstrと同等である(xselstr参照)。

このコマンドの利用例として、商品Aもしくは商品Bが含まれるレシートを選択し、含まれていないレシート(xdelkeystrによる)と比較する分析をあげることができる。さらに、このコマンドを2回連続で使うことにより、商品Aと商品Bの両方が含まれるレシートを選択することもできる(いわゆるバスケット分析の一部)。

keyが同じ値の行をすべて一時的にメモリに蓄えるため、keyの値が同じ行が多数存在する場合は、メモリ不足をまねき、エラーとなる可能性もある。ちなみに、一時的なメモリの確保はrealloc関数により動的に行っている。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xdelkeystr

xselkeystrで選択されない行が選択される(xselkeystr参照)。 

xselkeynul

keyで指定した項目値が同じ複数行に対して、fieldで指定した項目の値が一行でもnull値("*")が含まれていればそれらの複数行を全て選択する。

xselnulが単一行を対象としているのに対して、xselkeynulではkeyの値が同じ複数行を対象としている。それ以外はxselnulと同等である(xselnul参照)。

keyが同じ値の行をすべて一時的にメモリに蓄えるため、keyの値が同じ行が多数存在する場合は、メモリ不足をまねき、エラーとなる可能性もある。ちなみに、一時的なメモリの確保はrealloc関数により動的に行っている。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xdelkeynul

xselkeynulで選択されない行が選択される(xselkeynul参照)。 

xselkeynum

keyで指定した項目値が同じ複数行に対して、fieldで指定した項目の値がrangeで指定した数値範囲条件に一行でも一致すればそれらの複数行を全て選択する。

xselnumが単一行を対象としているのに対して、xselkeynumではkeyの値が同じ複数行を対象としている。それ以外はxselnumと同等である(xselnum参照)。

keyが同じ値の行をすべて一時的にメモリに蓄えるため、keyの値が同じ行が多数存在する場合は、メモリ不足をまねき、エラーとなる可能性もある。ちなみに、一時的なメモリの確保はrealloc関数により動的に行っている。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xdelkeynum

xselkeynumで選択されない行が選択される(xselkeynum参照)。 

xbest

keyで指定した項目値が同じ複数行に対して、bestで指定した行数分を先頭から選択する。

もしbestで指定した値より少ない行数しかなければ、その行数のみが選択される。bestに0を指定すれば何も選択されない。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

制限:bestで指定した数値はlong型として扱われる。 

xuniqb

keyで指定した項目値が同じ複数行に対して、一番下の行だけを選択する。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xuniqt

keyで指定した項目値が同じ複数行に対して、一番上の行だけを選択する。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xsep

fieldで指定した項目値が同じ行について、その項目値をファイル名として書き出す。ファイル名はpathで指定した文字列にfieldで指定した項目の値が付加されたものである。

例えば"199601 abc 10....."というデータに対して"xsep field=1 path=tmp/MONTH"を実行すれば、このデータは、カレントディレクトリのtmpというディレクトリの下に"MONTH199601"という名前のファイルとして書き出される。

fieldで複数項目を指定した場合、各項目値が"_"によって区切られてファイル名となる。例えば"199601 abc"というデータについて"field=1,2"と指定すれば、このデータは"199601_abc"というファイル名に書き出される。

ファイルへの書き出しは追加モードであるため、もしxsepを実行する前に同一名のファイルがあれば、その後ろに追加されるので注意が必要である。新規にファイルを書き出したければ、xsepの前にrm等のコマンドで明示的にファイルを削除しておく必要がある。

fieldで指定した項目の値にnull値("*")があったとしても、無視せずに"*"をファイル名として書き出す。

制限:pathを含めたファイル名の長さは、このコマンドとしては1024文字までである。しかし使用するOSのファイルシステムによっては長いファイル名は無効となる可能性がある。 

xcut

fieldで指定した項目を切り出す。

同じ項目番号を何度も指定することも可能である。 

xcutsub

fieldで指定した項目について、rangeの文字範囲を切り出し、新たな項目として付加する。文字範囲は"start_end"のように、切り出したい文字列の開始位置と終了位置を指定する。例えば"range=1_6"は1文字目から6文字目までの6文字を切り出すことを意味する。 

xconcatinate

fieldで指定した項目値を連結し、新しい項目として付加する。tokenで指定した文字列が項目間の連結文字となる。

連結文字をなくしたければ、token=""のようにnull文字を指定する必要がある。

複数項目の連結も可能である。 

xcutdel

fieldで指定した以外の項目を切り出す。xcutと逆の動きをする。

同じ項目番号を何度指定することも可能ではあるが意味はない。 

xsum

keyで指定した項目の値が同じ行に対して、fieldで指定した項目の値の合計を計算し、その計算行だけを出力する。

fieldで指定されていない項目に関しては、同じキー項目値を持つ最下行の値が出力される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値に一つでもnull値("*")が含まれていれば、結果もnull値となる。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。null値を無視して計算したければ、事前にxdelnulコマンドでnull値の行を省いておけばよい。 

xavg

keyで指定した項目の値が同じ行について、fieldで指定した項目の値の平均を計算し、その計算行だけを出力する。

fieldで指定されていない項目に関しては、同じキー項目値を持つ最下行の値が出力される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値に一つでもnull値("*")が含まれていれば、結果もnull値となる。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。null値を無視して計算したければ、事前にxdelnulコマンドでnull値の行を省いておけばよい。 

xmax

keyで指定した項目の値が同じ行について、fieldで指定した項目の値の最大値を見つけ、その計算行だけを出力する。

fieldで指定されていない項目に関しては、同じキー項目値を持つ最下行の値が出力される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値に一つでもnull値("*")が含まれていれば、結果もnull値となる。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。null値を無視して計算したければ、事前にxdelnulコマンドでnull値の行を省いておけばよい。 

xmin

keyで指定した項目の値が同じ行について、fieldで指定した項目の値の最小値を見つけ、その計算行だけを出力する。

fieldで指定されていない項目に関しては、同じキー項目値を持つ最下行の値が出力される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値に一つでもnull値("*")が含まれていれば、結果もnull値となる。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。null値を無視して計算したければ、事前にxdelnulコマンドでnull値の行を省いておけばよい。 

xstdev

keyで指定した項目の値が同じ行について、fieldで指定した項目の標準偏差(母集団全体に基づく)を計算し、その計算行だけを出力する。

fieldで指定されていない項目に関しては、同じキー項目値を持つ最下行の値が出力される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値に一つでもnull値("*")が含まれていれば、結果もnull値となる。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。null値を無視して計算したければ、事前にxdelnulコマンドでnull値の行を省いておけばよい。 

xcount

keyで指定した項目の値が同じ行の件数を計算し、keyの値とその件数を新たな項目として付け加え出力する。

keyで指定されていない項目に関しては、同じキー項目値を持つ最下行の値が出力される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xshare

keyで指定した項目の値が同じ行について、fieldで指定した項目の値の構成比を計算し、新しい項目として出力する。構成比は各行の値を合計値で割ることによって計算される。

keyが同じ値の行をすべて一時的にメモリに蓄えるため、keyの値が同じ行が多数存在する場合は、メモリ不足をまねき、エラーとなる可能性もある。ちなみに、一時的なメモリの確保はrealloc関数により動的に行っている。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値がnull値("*")の場合、その値は計算に反映されないが行としてはnull値の結果をもって出力される。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。

合計が0の場合には0割り算が発生することになるため結果としてnull値("*")を出力する。 

xaccum

keyで指定した項目の値が同じ行について、fieldで指定した項目の値の累計を計算し、新しい項目として出力する。累計は各行の値を順番に足すことによって計算される。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。

fieldで指定した項目の値がnull値("*")の場合、その値は計算に反映されないが行としてはnull値の結果をもって出力される。もしnull値を0として扱いたいならば、事前にxnultoコマンドでnull値を0に置換しておけばよい。 

xslide

keyで指定した項目の値が同じ行について、fieldで指定した項目について一行下の項目値を新しい項目として出力する。直感的にはfieldで指定した項目を一行上にスライドさせると見ればよい。

代表的な利用方法として、顧客の来店日付データに対して日付データをスライドさせ、日付計算すれば何日間隔で来店したかをつかむことができる。

入力ファイルはkeyで指定した項目で事前にソートされていなければならない。

"key=0"が指定されたとき、全行が同じキー値を持つものとして処理される。 

xjoin

keyで指定した項目の値が、masterで指定したマスターファイルの第一項目と同じであればそのファイルのfieldで指定した項目の値をを最後の項目として結合する。keyを複数個指定すれば、マスターファイルの最初の項目から順番に対応して比較される。例えば、"key=3,2"を指定すれば、入力ファイルの第三項目とマスターファイルの第一項目、そして入力ファイルの第二項目とマスターファイルの第二項目がそれぞれ比較され、両方とも一致する行について結合処理を行う。

もし、マスターファイルに同じ値がなければnull値("*")を結合する。その際、fieldで指定した項目の数と同等の数のnull値("*")を結合する。

入力ファイル、マスターファイルともに、比較される項目でそれぞれソートされている必要がある。 

xjoinr

fieldで指定した項目の数値が、fileで指定したファイルの第一項目に示された条件の範囲内にあれば、ファイルのfilefieldで指定した項目の値を最後の項目として結合する。

条件はxselnumと似ている。例えば"-10_10"のようにアンダーバーを挟んで数値範囲を指定する。「左の数字以上、右の数字未満(例では-10以上10未満)」を意味する。

また以上と未満の数値を省略すれば最小値、最大値を表す。例えば"_10"は「10未満」意味し、"10_"は「10以上」を意味する。

もし、ファイルに同じ値がなければnull値("*")を結合する。その際、filefieldで指定した項目の数と同等の数のnull値("*")を結合する。

fieldで指定した項目がnull値の場合も同様に、null値を結合する。

入力ファイル、ファイルともに、比較される項目でそれぞれソートされている必要はない。

fileの第一項目の条件指定が行によって重複していた場合、より上の行の条件が優先される。

fileをすべて一時的にメモリに蓄えるため、fileの行数が多い場合は、メモリ不足をまねき、エラーとなる可能性もある。ちなみに、一時的なメモリの確保はrealloc関数により動的に行っている。 

xseljoin

xjoinとxselmstとを組み合わせた処理を行う(xjoin、xselmstを参照)。 

xpaste

インファイルとfileで指定したファイルを単純に結合する。「単純」とは、行番号が同じ行を結合する意味である。

もしfileで指定したファイルの行数がインファイルの行数よりも長い場合、もしくは逆にインファイルの行数がfileで指定したファイルの行数よりも長い場合は、短い方の行がnull値("*")として出力される。 

xsetchr

valueで指定した値を、インファイルに新しい項目として追加する。

valueで指定した値は一切解釈されることはないので二項目を追加したければ、スペースで区切った値を指定する必要がある。そこでスペースは多くのシェルにおいて特殊文字となるために、シングルクォーテーション等でシェルに解釈させないようにしなければならない。 

xsetfile

fileで指定したファイルの先頭行の内容を、インファイルに新しい項目として追加する。

fileで指定したファイルに複数行数あったとしても、先頭行のみが対象となり、その他の内容は無視される。 

xadd

fieldで指定した項目の数値を合計し、その値を新しい項目として追加する。他の項目演算コマンドであるxsub、xmul、xdivとはパラメータの与え方が異なるので注意を要する。

fieldで指定した項目の値の中に一つでもnull値("*")が含まれていれば、その計算結果もnull値となる。もしnull値を0として扱いたければ、xnultoコマンドで事前にnull値を0に変換しておけばよい。 

xsub

field1で指定した項目の値からfield2で指定した項目の値を引き(−)、その結果を新しい項目として追加する。

field1もしくはfield2のいずれかの項目の値にnull値("*")が含まれていれば、その計算結果もnull値となる。もしnull値を0として扱いたければ、xnultoコマンドで事前にnull値を0に変換しておけばよい。 

xmul

field1で指定した項目の値にfield2で指定した項目の値を掛け(×)、その結果を新しい項目として追加する。

field1もしくはfield2のいずれかの項目の値にnull値("*")が含まれていれば、その計算結果もnull値となる。もしnull値を0として扱いたければ、xnultoコマンドで事前にnull値を0に変換しておけばよい。 

xdiv

field1で指定した項目の値をfield2で指定した項目の値で割り(÷)、その結果を新しい項目として追加する。

field1もしくはfield2のいずれかの項目の値にnull値("*")が含まれていれば、その計算結果もnull値となる。もしnull値を0として扱いたければ、xnultoコマンドで事前にnull値を0に変換しておけばよい。

また、field2の値が0の場合は、0割り算のエラーとなるため、結果はnull値("*")となる。 

xnumber

keyで指定した項目の値が同じ行について、1から始まる連番が新しい項目として付加される。 

xkeynumber

keyで指定した項目の値が同じ行ごとに、1から始まる連番が新しい項目として付加される。keyで指定した項目の値が同じ行には同じ連番がふられることになる。 

xrand

全行に対して乱数項目を新しい項目として付加する。seedによって乱数の初期値が設定される。seedが同じであれば乱数の出現パターンは同じになることが保証されている。

制限:通常の32bitOSであれば、乱数の最大値はINT型の最大値(2147483647)と等しい。seedの最大値も同様である。 

xkeyrand

keyで指定した項目の値が同じ行ごとに、乱数項目が付加される。その他はxrandと同様である(xrand参照)。 

xtoday

本日の日付(年月日)を新しい項目として付加する。

日付項目は"yyyymmdd"の固定長フォーマットで与えらる。しかしながらこれは西暦10000年問題の元凶となる。将来的には年月日をそれぞれ別項目と持つべきであろう。 

xnow

現在の時間(時分秒)を新しい項目として付加する。

時間項目は"hhmmss"の固定長フォーマットで与えられている。 

xday

field1で指定した日付からfield2で指定した日付をまでの経過日数を計算し新しい項目として付加する(field1−field2)。日付項目は"yyyymmdd"の固定長フォーマットで与えらる。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

field1もしくはfield2がnull値ならば結果もnull値となる。

制限:グレゴリオ暦が採用された西暦1582年10月15日から9999年までに対応している。 

xsecond

field1で指定した日時からfield2で指定した日時をまでの経過秒数を計算し新しい項目として付加する(field1−field2)。日時項目は"yyyymmddhhmmss"の固定長フォーマットで与えらる。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

日付と時間項目が別れている場合、xconcatinateコマンドで一つの項目としておく必要がある。

field1もしくはfield2がnull値ならば結果もnull値となる。 

xdayadd

field1で指定した日付にfield2で指定した項目の値(日数)を加え、その日付を計算し、新しい項目として付加する。日付項目は"yyyymmdd"の固定長フォーマットで与えらる。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

field1もしくはfield2がnull値ならば結果もnull値となる。

制限:年月日はグレゴリオ暦が採用された西暦1582年10月15日から、日数はlong制限(2147483647)まで可能である。 

xwday

field1で指定した日付の曜日を計算し、その曜日を新しい新しい項目として付加する。日付項目は"yyyymmdd"の固定長フォーマットで与えらる。曜日はそれぞれ0(Sun),1(Mon),2(Tsu),3(Wed),4(Thu),5(Fri),6(Sat)で表される。曜日の前に数字が付いているのは、並べ替えたときに日曜日から土曜日までが順番に並ぶようにである。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

fieldがnull値ならば結果もnull値となる。

制限:年月日はグレゴリオ暦が採用された西暦1582年10月15日から対応している。 

xweek

fieldで指定した日付の週連番とその週開始日付を計算し、それらの値を新しい項目として付加する。週連番とは1989/12/31〜1990/01/06を第0週とする週番号である。週開始日付とは、週連番の週の第一日目の日付である。その日付は日曜日であることが保証されている。

1989/12/31より前の日付に関してはマイナスの値として出力される。

fieldがnull値ならば結果もnull値となる。

制限:年月日はグレゴリオ暦が採用された西暦1582年10月15日から、週番号はlong制限(2147483647)まで可能である。 

xage

field1を現在の日付、field2を誕生日として年齢を計算し、その値を新しい項目として付加する。これは年齢計算だけでなく、二つの日付間の経過年数計算(field1-field2)にも用いられる(xdayの年版と考えればよい)。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

field1もしくはfield2がnull値ならば結果もnull値となる。

制限:年月日はグレゴリオ暦が採用された西暦1582年10月15日から対応している。 

xage5

field1を現在の日付、field2を誕生日として年齢を計算し、5歳刻み年代を新しい項目として付加する。5歳刻み年代とは、年齢の下一桁が0から4であれば0とし、5から9であれば5とする年代である。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

field1もしくはfield2がnull値ならば結果もnull値となる。

制限:年月日はグレゴリオ暦が採用された西暦1582年10月15日から対応している。 

xage10

field1を現在の日付、field2を誕生日として年齢を計算し、10歳刻み年代を新しい項目として付加する。10歳刻み年代とは、年齢の下一桁を切り捨てた年齢のことである。

ミレニアム問題(4年に一度は閏年、100年に一度は非閏年、400年に一度は閏年)にも対応している。

field1もしくはfield2がnull値ならば結果もnull値となる。

制限:年月日はグレゴリオ暦が採用された西暦1582年10月15日から対応している。 

xnulto

fieldで指定された項目について、null値("*")をvalueで指定した値に変換する。null値とは"*"で始まる値のことである。

多くのXコマンドはnull値に対する演算結果はnull値となる。一方でnull値を0として扱いたいことがある。そのような時に用いる。また、null値の種類を明示したいときにも用いられる。 

xrecords

recordsで指定した行数を一行にまとめる。

全行数がrecordsで指定した値の倍数でなければ、足りない行数をnull値で出力する。またこのコマンドは単純に各行を一行に変換しているだけのため、元の項目数が一致していなければ結果項目の数も一致しなくなる。 

x45

positionで指定した数値が正の場合、fieldで指定した項目の小数点以下第pos+1を四捨五入し、小数点以下第pos桁までを出力する。

positionで指定した数値が不の場合、fieldで指定した項目の第pos+1を四捨五入し、第pos桁と以下0を出力する。

positionの値と実際の数値との関係を例示すると、"1234.5678"において左から順番に-4,-3,-2,-1,0,1,2,3,4となる。小数点が0となるが、0は-1と同じ動作をする。 

xdown

positionで指定した数値が正の場合、fieldで指定した項目の小数点以下第pos+1を切り捨て、小数点以下第pos桁までを出力する。

positionで指定した数値が不の場合、fieldで指定した項目の第pos+1を切り捨て、第pos桁と以下0を出力する。

positionの値と実際の数値との関係を例示すると、"1234.5678"において左から順番に-4,-3,-2,-1,0,1,2,3,4となる。小数点が0となるが、0は-1と同じ動作をする。 

xdown

positionで指定した数値が正の場合、fieldで指定した項目の小数点以下第pos+1を切り上げ、小数点以下第pos桁までを出力する。

positionで指定した数値が不の場合、fieldで指定した項目の第pos+1を切り上げ、第pos桁と以下0を出力する。

positionの値と実際の数値との関係を例示すると、"1234.5678"において左から順番に-4,-3,-2,-1,0,1,2,3,4となる。小数点が0となるが、0は-1と同じ動作をする。 

xspace

keyで指定した項目の値が変わる行に空白行を挿入する。

最終行の後には挿入されない。 

xcomma

fieldで指定した項目を数値と見なし、3桁ごとにコンマ(,)をつける。

小数点以下の数値に対してはコンマをつけない。

マイナス数値にも対応している。

数字以外の項目については何も処理しない。 

xfname

fileで指定したファイルについて、そのファイル名を新しい項目として付加する。ファイル名にはパス名を含むこともできる。ただし各ディレクトリ名を区切る文字("/")は空白文字(" ")に置き換えられる(ただし、先頭の"/"は無視される)。すなわち別項目として扱われる。例えば、"file=/home/abc/data"と指定すれば、"home abc data"という3つの項目が新たに付加される。

標準入力からの入力はない。 

xfinfo1

fileで指定したファイルについての情報を環境変数設定コマンドとして標準出力に書き出す。

出力の形式は"set 変数名=値"となる。実行結果をファイルに出力し、そのファイルをsourceコマンドで実行すれば環境変数としてセットされる。

情報の種類は以下の通りで、情報の獲得に時間をほとんど必要としない。

FNAME :ファイル名

ADATE :最新更新日付

ATIME :最新更新時間

CDATE :初期作成日付

CTIME :初期作成時間

SIZE :バイト数

FLDCNT :項目数(第一行目による) 

xfinfo2

fileで指定したファイルについての情報を環境変数にセットする。情報の種類は以下の通りで、情報の獲得には全行を走査しなければならず、時間を必要とする可能性がある。

RECCNT:レコード行数 

xbasket

keyで指定した項目の値が同じ行について、fieldで指定した値の組み合わせを生成する。組み合わせの数はvalueで指定する。

このコマンドは、どのような商品の組み合わせの関連購入が多いかに関する分析、いわゆるバスケット分析の際によく利用する。顧客のレシート番号をkeyで指定し、fieldに商品コードを指定し、さらにvalueに2を指定すれば、2商品のありうる組み合わせが全て生成される。その結果をxcountなどのコマンドで集計すれば、どの商品の組み合わせが多く売れているかわかる。またvalueで3以上を指定することによって、3商品以上の関連性がわかる。

結果はkeyで指定した項目値と組み合わせの結果値のみ出力される。

keyが同じ値の行のfield値はすべて一時的にメモリに蓄えられるため、keyの値が同じ行が多数存在する場合は、メモリ不足をまねき、エラーとなる可能性もある。ちなみに、一時的なメモリの確保はrealloc関数により動的に行っている。

データ行数やvalueの与え方によっては、データが爆発的に増えるので注意を要する。 

xbasket2

keyで指定した項目の値が同じ行について、fieldで指定した値の順列を生成する。組み合わせの数はvalueで指定する。

xbasketコマンドが組み合わせであったのに対し、このコマンドでは順列を生成する(xbasket参照)。

データ行数やvalueの与え方によっては、データが爆発的に増えるので注意を要する。 

xlist

入力データをHTMLのテーブル形式に変換する。

パラメータとしてkey=,title=,head=,field=,position,foot=を指定することができる。これらのパラメータは省略できる。

key=:データの第一項目からkeyで指定した項目番号までの項目について、同じ値に関しては、複数行にまたがってセルを表示し、かつ強調表示にする。

title=:ここで指定されたファイルのデータをタイトルとしてみなし、帳票の最上行から表示する。表示は、強調、サイズ=5、左詰である。

head=:ここで指定されたファイルのデータをヘッダーデータとしてみなし、タイトルの次に表示する。表示は、サイズ=2、左詰である。

foot=:ここで指定されたファイルのデータをフッターデータとしてみなし、帳票の最下行から表示する。表示は、サイズ=2、左詰である。

field=:ここで指定されたファイルのデータを項目名データとしてみなし、同じテーブル内の最上位に表示する。このデータには次のような構造上の規約がある。

・項目名をツリー形式で指定できる。

例えば、以下のような2行の項目名データは、1998年と1999年のそれぞれに数量と金額がぶら下がるツリー形式である。

商品名 1998年 1998年 1999年 1999年

商品名 数量 金額 数量 金額

これらのツリー形式は複数列にまたがったセルとして表示される。

項目名の表示は、強調、網掛け、中央揃えである。

position=:ここで指定されたファイルのデータをデータの表示位置データとしてみなす。"L"は左揃え、"R"は右揃え、"C"は中央揃えである。項目の数だけスペースで区切って指定しなければならない。