1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#!/bin/awk -f
function printusage() {
print "Usage: lipsum [# of] [w/words|s/sentences|p/paragraphs] [1/t/true|0/f/false output 'lorem ipsum' in first entry] [min words] [max words]\n"
exit 1
}
function capitalize() {
sub(/./, toupper(substr($0, 0, 1)))
}
function randrange(min, max) {
return int((rand() * (max - min)) + min)
}
function isint(arg) {
return arg ~ /^[0-9]+$/
}
function genwords(words, cmd) {
if (words > 0 && cmd | getline) {
capitalize(); print
for (i = 1; cmd | getline && i < words; i++)
print " "$0
print "\n"
}
}
function gensentences(sentences, delim, cmd, min, max) {
for (; sentences > 0 && cmd | getline; sentences--) {
capitalize(); print
words = randrange(min, max) # Isn't possible to initialize or increment multiple variables in awk for loops
for (i = 1; cmd | getline && i < words; i++)
print (rand() < 0.10 ? ", " : " ")$0
print delim
}
}
function genparagraphs(paragraphs, cmd, min, max) {
for (; paragraphs > 0; paragraphs--) {
print "\t"
gensentences(randrange(6, 10), ". ", cmd, min, max)
print "\n"
}
}
BEGIN {
dictionary = "/home/timmy/.local/share/lorem-ipsum-dictionary" # List of lorem ipsum words separated by newlines
cmd = "< "dictionary" shuf -r -n" # Command to generate random permutations of words from dictionary separated by newlines
echolorem = "echo -n 'lorem\nipsum\ndolor\nsit\namet\n'"
ORS = ""
srand()
# Parse Arguments
!isint(ARGV[1]) && ARGV[1] && printusage()
numof = ARGC > 1 ? ARGV[1] : 5
mode = ARGC > 2 ? ARGV[2] : "p"
litext = 1
if (ARGV[3])
switch (ARGV[3]) {
case /^1$|^t$|^true$/: litext = 1; break
case /^0$|^f$|^false$/: litext = 0; break
default: printusage()
}
litext && cmd = echolorem "&&" cmd
min = isint(ARGV[4]) ? ARGV[4] : 5
max = isint(ARGV[5]) ? ARGV[5] : 12
switch (mode) {
case /^w$|^words$/:
cmd = cmd numof
genwords(numof, cmd)
break
case /^s$|^sentences$/:
cmd = cmd (max * numof)
gensentences(numof, ".\n", cmd, min, max)
break
case /^p$|^paragraphs$/:
cmd = cmd (max * 10 * numof)
genparagraphs(numof, cmd, min, max)
break
default:
printusage()
}
close(cmd)
}
|