Некоторые серверы предоставляют HTTP-доступ к отпечаткам пальцев, например.keys2.kfwebs.net ; это даст вам бронированные ключи, завернутые в простой HTML:
curl 'http://keys2.kfwebs.net/pks/lookup?op=get&search=0xdb221a6900000011'
загрузит всю страницу,
curl 'http://keys2.kfwebs.net/pks/lookup?op=get&search=0xc465beb43c11b337' |
awk '/^-----BEGIN/ { inblock = 1 } /^-----END/ { inblock = 0; print} inblock'
извлечет открытый ключ.
Вы также можете попробовать адаптировать parcimonie , инструмент, который обновляет связки ключей через Tor, чтобы обойти проблему с прокси-сервером.
Имейте в виду, что некоторые ключи были отравлены , так что не стоит слепо импортировать ключи с серверов ключей (, хотя на самом деле это никогда не было ). Также всегда проверяйте полный отпечаток пальца и используйте идентификаторы длинных ключей.
Зачем использовать awk
, если, по крайней мере, на большинстве Unix-компьютеров вы можете просто:
$ seq 6 | shuf
5
2
3
4
1
6
или как @StéphaneChazelas упомянул в комментарии shuf -i 1-6
.
Если вы все же хотите использовать awk, вот один из подходов, использующий Knuth Shuffle:
$ cat tst.awk
function shuf(arr, i, j, n, tmp) {
n = length(arr)
for (i=n; i>1; i--) {
j = int( 1 + rand()*i )
tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
}
BEGIN {
srand()
for (i=1; i<=n; i++) { arr[i] = i }
shuf(arr)
for (i=1; i<=n; i++) { print arr[i] }
}
$ awk -v n=6 -f tst.awk
3
1
5
4
6
2
который просто заполняет массив нужными вам значениями, затем меняет местами значение, хранящееся в каждом индексе в массиве, со значением, хранящимся в каком-то другом случайно выбранном индексе, а затем печатает массив.
Обратите внимание, что функция shuf()
выше работает за один проход массива.
Похоже, вы просто хотите перетасовать числа от 1 до 6.
В большинстве реализаций sort
есть опция -R
для сортировки "произвольно" (эта опция не является стандартной ). В большинстве оболочек есть «расширения скобок» для создания комбинаций строк или чисел в диапазонах (раскрытия скобок не являются стандартными):
$ printf '%s\n' {1..6} | sort -R
6
2
3
4
5
1
Всего 720 (= 6! (6факториал )= 1×2×3×4×5×6 )различные способы расположения шести разных вещей (включая цифры от 1 до 6 ). Таким образом, один из подходов состоит в том, чтобы сгенерировать случайное число от 1 до 6! (ну, на самом деле, между 0 и 6!−1 )и сопоставьте это с соответствующей перестановкой.
BEGIN {
n = 6
srand()
# Compute n! (n factorial) and create an array of numbers.
f = 1
for (i = 1; i <= n; i++) {
f *= i;
nums[i] = i;
}
# Get random number between 0 and n!-1.
r = int(rand()*f)
# Deconstruct it.
for (i = n; i > 0; i--) {
remainder = r % i + 1
print nums[remainder]
# Remove it from the array.
for (j = remainder; j < n; j++) nums[j] = nums[j+1]
r = int(r/i)
}
}
Это плохо масштабируется.
Преимущества:
rand()
очень дорог, потому что он вызывает rand()
только один раз. r
известное значение, а не случайное ).