Something like this?
#!/bin/bash
export LC_ALL=C
for((i=0; i<1500; ++i)); do
IFS='' read -n 4 -d '' bytes
# https://stackoverflow.com/questions/28476611/ord-and-chr-a-file-in-bash
printf -v a %u "'${bytes:2:1}"
a=$((a%255))
printf -v b %u "'${bytes:3:1}"
b=$((b%255))
printf "%s %s\n" "$(
tr '\000-\011\013-\140\173-\377' 'a-za-za-za-za-za-za-za-za-z' <<<"${bytes:0:2}"
)" $((${a#-}*${b#-}))
done</dev/urandom
The %u
conversion oddly creates really big numbers when the character code is above 0x80, and the modulo 255 of that creates a negative number, so I had to do some nonobvious workarounds to fix that. Perhaps you could come up with a less contorted way to unpack two bytes into an unsigned 15-bit number.
Here's an update which gets results in the range 200000-1000000 in the second column. It needs two additional random bytes and then performs a modulo and addition on the result to bring it into the correct range. This is outside the reach of the Bash built-in arithmetic so I used bc
instead.
#!/bin/bash
export LC_ALL=C
for((i=0; i<1500; ++i)); do
IFS='' read -n 6 -d '' bytes
# https://stackoverflow.com/questions/28476611/ord-and-chr-a-file-in-bash
printf -v a %u "'${bytes:2:1}"
a=$((a%255))
printf -v b %u "'${bytes:3:1}"
b=$((b%255))
printf -v c %u "'${bytes:4:1}"
c=$((c%255))
printf -v d %u "'${bytes:5:1}"
d=$((d%255))
printf "%s %s\n" "$(
tr '\000-\011\013-\140\173-\377' 'a-za-za-za-za-za-za-za-za-z' <<<"${bytes:0:2}"
)" $(bc <<<"((${a#-}*${b#-}*${c#-}*${d#-})%800000)+200000")
done</dev/urandom
This is getting pretty complex, though. If Bash is not essential for you, try this Python 3 script.
from random import choice, randrange
from string import ascii_lowercase
for r in range(1500):
print('{0}{1} {2}'.format(
choice(ascii_lowercase),
choice(ascii_lowercase),
200000+randrange(999999800000)))