#!/bin/bash ################################################################################ #クラスの登録(頭に表示での並びのための番号を付ける) ################################################################################ baseCmd="01:基本コマンド" unixSort="02:UNIXソート" mssSort="03:ソート" mssAggSum="04:合計" mssUniq="05:行単一化" mssApp="80:応用" ################################################################################ # UNIXコマンド ################################################################################ function b_cat { title="$baseCmd 1:単にcat" cat } function b_wc { title="$baseCmd 2:単にwc" wc } function b_awk1 { title="$baseCmd 3:awkによる項目反転" awk '{print $17,$16,$15,$14,$13,$12,$11,$10,$9,$8,$7,$6,$5,$4,$3,$2,$1}' } function b_ucut1 { title="$baseCmd 4:cutによる項目反転" cut -d' ' -f 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 } function b_cut1 { title="$baseCmd 5:xtcutによる項目反転" xtcut -f s4,s3,s2,s1,time2,date2,time1,date1,rand2,rand1,price,qtty,key4,key3,key2,key1,No } function b_awk2 { title="$baseCmd 6:awkによる3項目切り出し" awk '{print $2,$6,$7}' } function b_ucut2 { title="$baseCmd 7:cutによる3項目切り出し" cut -d' ' -f 2,6,7 } function b_cut2 { title="$baseCmd 8:xtcutによる3項目切り出し" xtcut -f key1,qtty,price } ################################################################################ # UNIXソート ################################################################################ function b_sort_key1 { title="$unixSort 1:key1によるソート" sort +1 -2 } function b_sort_key2 { title="$unixSort 2:key2によるソート" sort +2 -3 } function b_sort_key3 { title="$unixSort 3:key3によるソート" sort +3 -4 } function b_sort_key4 { title="$unixSort 4:key4によるソート" sort +4 -5 } function b_sort_key1234 { title="$unixSort 5:key1234によるソート" sort +1 -5 } ################################################################################ # ソート ################################################################################ function b_xtsort_key1 { title="$mssSort 1:key1によるソート" xtsort -k key1 } function b_xtsort_key2 { title="$mssSort 2:key2によるソート" xtsort -k key2 } function b_xtsort_key3 { title="$mssSort 3:key3によるソート" xtsort -k key3 } function b_xtsort_key4 { title="$mssSort 4:key4によるソート" xtsort -k key4 } function b_xtsort_key1234 { title="$mssSort 5:全keyによるソート" xtsort -k key1,key2,key3,key4 } ################################################################################ # 合計 ################################################################################ function b_xtagg_sum { title="$mssAggSum 1:キーを指定しないqtty,priceの総合計" xtcut -f qtty,price | xtagg -f qtty,price -c sum } function b_xtagg_sum_key1 { title="$mssAggSum 2:key1によるqtty,priceの合計" xtcut -f key1,qtty,price | xtagg -k key1 -f qtty,price -c sum } function b_xtagg_sum_key2 { title="$mssAggSum 3:key2によるqtty,priceの合計" xtcut -f key2,qtty,price | xtagg -k key2 -f qtty,price -c sum } function b_xtagg_sum_key3 { title="$mssAggSum 4:key3によるqtty,priceの合計" xtcut -f key3,qtty,price | xtagg -k key3 -f qtty,price -c sum } function b_xtagg_sum_key4 { title="$mssAggSum 5:key4によるqtty,priceの合計" xtcut -f key4,qtty,price | xtagg -k key4 -f qtty,price -c sum } function b_xtagg_sum_key1234 { title="$mssAggSum 6:全keyによるqtty,priceの合計" xtcut -f key1,key2,key3,key4,qtty,price | xtagg -k key1,key2,key3,key4 -f qtty,price -c sum } ################################################################################ # 行の単一化 ################################################################################ function b_xtuniq_key1 { title="$mssUniq 1:key1による単一化" xtuniq -k key1 } function b_xtuniq_key2 { title="$mssUniq 2:key2による単一化" xtuniq -k key2 } function b_xtuniq_key3 { title="$mssUniq 3:key3による単一化" xtuniq -k key3 } function b_xtuniq_key4 { title="$mssUniq 4:key4による単一化" xtuniq -k key4 } function b_xtuniq_key1234 { title="$mssUniq 5:全keyによる単一化" xtuniq -k key1,key2,key3,key4 } ################################################################################ # 応用 ################################################################################ function b_custAvgVisitDay { title="$mssApp 1:顧客別平均来店間隔日数" xtcut -f key1,date1 | xtslide -k key1 -f date1:nextVisit | xtcal -c 'day($nextVisit,$date1)' -a day | xtcut -f key1,day | xtagg -k key1 -f day -c avg } function b_custBrandPattern { title="$mssApp 2:顧客別ブランド購入パターン" xtsel -c '$key4>=100000 && $key4<=100009' | xtcut -f key1:cust,date1:date,key4:brand | xtchgstr -f brand -c 100000:a,100001:b,100002:c,100003:d,100004:e,100005:f,100006:g,100007:h,100008:i,100009:j | xtpattern -k cust -s date -f brand:pattern | xtcut -f cust,pattern } ################################################################################ # ベンチマーク処理 ################################################################################ function loop5 { cnt=0 while [ $cnt -lt 5 ]; do cat /dev/null echo start $cnt trial=$1 data=$2 echo -n start $cnt $1 $2" " >>result/$1 echo -n $(date '+%Y%m%d %H%M%S')" " >>result/$1 $1 /dev/null echo -n $(date '+%Y%m%d %H%M%S')" " >>result/$1 echo $title >>result/$1 cnt=$((cnt+1)) done } function byInCnt { rm result/$1 &>/dev/null if [ "$test" = "1" ] ; then loop5 $1 100000 100 loop5 $1 500000 500 loop5 $1 1000000 1000 loop5 $1 2000000 2000 else loop5 $1 100000 100000 loop5 $1 500000 500000 loop5 $1 1000000 1000000 loop5 $1 2000000 2000000 fi } mkdir -p result # 利用法表示 if [ 0 -eq $# ] ;then echo "usage) bench.sh {スクリプト名 | all} [test]" echo "ex1) bench.sh all; 全てのスクリプトのベンチマークを実行" echo "ex2) bench.sh all test; 全てのスクリプトのベンチマークを小さいデータで実行" echo "ex3) bench.sh b_wc; b_wcスクリプトのみのベンチマークを実行" echo "ex4) bench.sh b_wc test; b_wcスクリプトのみのベンチマークを小さいデータで実行" exit fi # テスト実行かどうか if [ "test" = "$2" ]; then test=1 else test=0 fi echo test=$test # 全スクリプト実行 if [ "all" = "$1" ]; then rm -f result/* grep '^function b_' xxscp . ./xxscp exit fi # 指定のスクリプトのみ実行 byInCnt $1 rm xx* &>/dev/null