################################################################################
#
# PPL -- Producing Random Data
#
# PPL functions produce random data in the form of strings, numbers or dates.
# PPL functions may be used in conjunction with SPAWK functions in order to
# populate database tables mainly for testing purposes.
#
# This is not a great library; it's here mainly for tutorial purposes but any
# can use it to produce random data of some basic types.
#
# Because of rand AWK function particularity, data produced from specific AWK
# programs are random, but always the same when the same AWK executable is used.
# This may be useful for testing purposes; if real random data is needed, then
# srand function must be called in the BEGIN section before any PPL function is
# called.
#
# If you want to produce random strings from foreign character sets, e.g el_GR
# UTF-8, then you must create a palette and call ppl_string function with this
# custom palette:
#
# BEGIN {
# srand()
# ppl_palette("αβγδεζηθικλμνοξοπρστυφψω", gr_lower)
# ppl_palette("ΑΒΓΔΕΖΗΘΙΚΛΜΝΟΞΟΠΡΣΤΥΦΨΩ", gr_upper)
#
# for (i = ppl_integer(100, 200); i > 0; i--)
# print ppl_string(10, 20, gr_upper)
# }
#
# The above script will print a random number (between 100 and 200) of random
# strings of random length (between 10 and 20) constructed of greek uppercase
# letters.
#
################################################################################
BEGIN {
ppl_palette("abcdefghijklmnopqrstuvwxyz", ppl_lower)
ppl_palette("ABCDEFGHIJKLMNOPQRSTUVWXYZ", ppl_upper)
}
function ppl_string(min, max, palette, s) {
if (max < min)
max = min
max = int(rand() * (max + 1 - min)) + min
for (min = 0; min < max; min++)
s = s palette[int(rand() * palette[0]) + 1]
return s;
}
function ppl_integer(min, max) {
return int(rand() * (max + 1 - min)) + min
}
function ppl_float(min, max) {
return (rand() * (max - min)) + min
}
function ppl_timestamp(min, max) {
if (!max)
max = systime()
if (min < 0)
min = max + min
return ppl_integer(min, max)
}
function ppl_login() {
return ppl_string(3, 16, ppl_lower)
}
function ppl_domain() {
return ppl_string(3, 20, ppl_lower) "." ppl_string(2, 3, ppl_lower)
}
function ppl_email() {
return ppl_login() "@" ppl_domain();
}
function ppl_name() {
return ppl_string(1, 1, ppl_upper) \
ppl_string(3, 16, ppl_lower) " " \
ppl_string(1, 1, ppl_upper) \
ppl_string(3, 16, ppl_lower)
}
function ppl_palette(spalette, palette) {
return (palette[0] = split(spalette, palette, ""))
}