ScriptBuilder
使い方 redisへの書込みを大量に生成したい、SQLのinset文を大量に生成したいときなどに
ScriptBuilderに生成元となる「元ネタ」を与え、大量のscriptを生成します。
redisへの書込みコマンド大量発行サンプル、databaseへのinset文の大量発行は、後日公開します。
例)loop.csvの元ネタ4行から、24行生成して文字列を出力する
awk -f scriptbuilder.awk loop.csv
00001,1,111,222,333,444,555,666,777,888,999,000
00002,2,111,222,333,444,555,666,777,888,999,000
00003,1,111,222,333,444,555,666,777,888,999,000
00004,2,111,222,333,444,555,666,777,888,999,000
00005,1,111,222,333,444,555,666,777,888,999,000
00006,2,111,222,333,444,555,666,777,888,999,000
00007,1,111,222,333,444,555,666,777,888,999,000
00008,2,111,222,333,444,555,666,777,888,999,000
00009,1,111,222,333,444,555,666,777,888,999,000
00010,2,111,222,333,444,555,666,777,888,999,000
00011,1,111,222,333,444,555,666,777,888,999,000
00012,2,111,222,333,444,555,666,777,888,999,000
00013,1,111,222,333,444,555,666,777,888,999,000
00014,2,111,222,333,444,555,666,777,888,999,000
00015,1,111,222,333,444,555,666,777,888,999,000
00016,2,111,222,333,444,555,666,777,888,999,000
00017,1,111,222,333,444,555,666,777,888,999,000
00018,2,111,222,333,444,555,666,777,888,999,000
00019,1,111,222,333,444,555,666,777,888,999,000
00020,2,111,222,333,444,555,666,777,888,999,000
0021,3,111,222,333,444,555,666,777,888,999,000
0022,3,111,222,333,444,555,666,777,888,999,000
4,111,222,333,023444,555,666,777,888,999,000
24[#55555555555555555555555555555555555555555]
loop.csvの中身 予約語は[]で囲んで指定する
[sleep 1]
[loop 10]
[lineNum05],1,111,222,333,444,555,666,777,888,999,000
[lineNum05],2,111,222,333,444,555,666,777,888,999,000
[sleep 0.0001]
[loopEnd]
[loop 2]
[lineNum04],3,111,222,333,444,555,666,777,888,999,000
[sleep 0.5]
[loopEnd]
[sleep 1.0]
4,111,222,333,[lineNum03]444,555,666,777,888,999,000
[lineNum][#55555555555555555555555555555555555555555]
説明
# 0.sleepを1秒する
[sleep 1]
# 1.loop処理を開始する
# この例では10回繰り返しすることの開始の宣言
[loop 10]
# 2.script生成の元ネタ1行目を与え出力する
# [lineNum05]は行数をカウントする際に指定する
# 05の意味はprintf()文の書式文字列[%05d]の05と同じ意味
[lineNum05],1,111,222,333,444,555,666,777,888,999,000
# 3.script生成の元ネタ2行目を与え出力する
# [lineNum05]は行数をカウントする際に指定する
# 05の意味はprintf()文の書式文字列[%05d]の05と同じ意味
[lineNum05],2,111,222,333,444,555,666,777,888,999,000
# 4.sleepを0.0001秒(0.1ミリ秒)する
# loop処理をする際にcpuを占有しないようにする
# このScriptBuilderをmulti processで動作するときのための対応策
[sleep 0.0001]
# 5.loop処理の終了 loopをn回、loopEndまで繰り返す
# この例では、2.から4.までを10回繰り返す
[loopEnd]
# 6.2回目のloop処理開始
# この例では2回繰り返しすることの開始の宣言
[loop 2]
# 7.script生成の元ネタ3行目を与え出力する
3,111,222,333,444,555,666,777,888,999,000
# 8.sleepを0.5秒する
[sleep 0.5]
# 9.loop処理の終了 loopをn回、loopEndまで繰り返す
# この例では、7.から8.までを10回繰り返す
[loopEnd]
# 10.sleepを1秒する(小数点付きで指定しても良い)
[sleep 1.0]
# 11.script生成の元ネタ4行目を与え出力する
# [lineNum03]は行数をカウントする際に指定する
# 03の意味はprintf()文の書式文字列[%03d]の03と同じ意味
# script文中で行数を使用したい場合(ユニークなシーケンス番号など)行中で指定し、文字列連結する
4,111,222,333,[lineNum03]444,555,666,777,888,999,000
# 12.script生成の元ネタ5行目を与え出力する
# [lineNum]は整形せずに行番号をそのまま出力する
# []内に予約語がない場合は、そのまま出力する
[lineNum][#55555555555555555555555555555555555555555]