Если вы хотите, чтобы некоторые случайности остаться, вам нужно добавить опцию --stable
на второго рода:
$ sort --random-sort test.txt | sort --key=2,2 --stable
2 a 1
1 a 2
1 b 2
2 b 1
$ sort --random-sort test.txt | sort --key=2,2 --stable
1 a 2
2 a 1
1 b 2
2 b 1
Это документируется gnu.org:
Пара строк сравнивается следует: сортировка сравнивает каждую пару полей в порядке, указанном в командной строке, в соответствии с связанными параметрами порядка до тех пор, пока не будет найдена разница или не останется полей . Если ключевые поля не заданы, сортировка использует по умолчанию ключ всей строки. Наконец, в крайнем случае, когда все ключи сравниваются с , сортировка сравнивает целые строки, как если бы не были указаны параметры заказа, отличные от --reverse (-r). Параметр -stable (-s) отключает это сравнение последнего курорта, так что строки, в которых все поля сравниваются, равны , остаются в исходном относительном порядке. Опция -unique (-u) также отключает сравнение последнего курорта.
Другими словами, в вашем случае, если две строки сравнить же под ключ = 2,2, sort
, по умолчанию, игнорировать ваш ключ выбора и сравнить всю линию. Указывая --stable
, поведение по умолчанию подавляется, и исходный порядок сохраняется для этих строк.