Вот один из способов сделать это в GNU awk (который поддерживает пользовательские процедуры сортировки):
#!/usr/bin/gawk -f
function mycmp(ia, va, ib, vb) {
return rand() < 0.5 ? 0 : 1;
}
BEGIN {
srand();
}
$3 - $2 > 3 && $3 - $2 < 10 {
a[NR]=$0;
}
END {
asort(a, b, "mycmp");
for (i = 1; i < 3; i++) print b[i];
}
Тестирование с заданными данными:
$ for i in {1..6}; do printf 'Try %d:\n' $i; ../randsel.awk file; sleep 2; done
Try 1:
g 1 8
e 6 14
Try 2:
a 1 5
b 4 12
Try 3:
b 4 12
a 1 5
Try 4:
e 6 14
a 1 5
Try 5:
b 4 12
a 1 5
Try 6:
e 6 14
b 4 12