blob: 99f5b4e14f4ebcf8b981d56b3f5979e54223b245 (
plain) (
blame)
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
|
# Print a random line from input
# Process arguments
BEGIN {
# Name self
self = "rndl"
# Get a random seed if rnds(1df) available
rnds = "rnds 2>/dev/null"
rnds | getline seed
close(rnds)
# Truncate the seed to 8 characters because mawk might choke on it
seed = substr(seed,1,8)
if (length(seed))
srand(seed + 0)
else
srand()
}
# Iterate over the lines, randomly assigning the first field of each one with a
# decreasing probability
rand() * NR < 1 { ln = $0 }
# Check and print
END {
# Check that we processed at least one line
if (!NR) {
stderr = "cat >&2"
printf "%s: No lines found on input\n", self | stderr
close(stderr)
exit(1)
}
# Print the line
print ln
}
|