Чистый bash
метод:
printf -v s '%s' {a..z} {A..Z} {0..9}
while read x; do
n=${x:((-1))}
echo -n ${x%?}
p=${s#*$n}
echo ${s:(( (${#p}>=10) ? RANDOM*52/32768 : 52 + RANDOM*10/32768 )):1}
done < file
Метод GNUsed
с использованием командыe
value для запуска tr
и head
в /dev/urandom для генерации случайных символов:
sed 's/\(.*\)\(.\)$/\
printf \1 ; \
echo \2 | \
tr '[:alpha:][:digit:]' "$({ tr -dc '[:alpha:]' | head -c 52; \
tr -dc '[:digit:]' | head -c 10; \
} < \/dev\/urandom;)"/e' file
Выход (меняется в зависимости от запуска):
bob1237
pittsburgq
0091916
Примечание. :ни один из методов не проверяет, отличается ли случайно выбранный символ от предыдущего символа, но чаще всего это так.