Утилита sort
текста GNU имеет нестандартную опцию -R
для рандомизации входных строк.
sort
OSX не имеет этого расширения. Есть ли подобная функциональность в другом текстовом фильтре?
Если вы хотите, вы можете установить GNU sort
через пакет coreutils GNU поверх Homebrew, который является менеджером пакетов для OS X.
Запуск этого установит Homebrew.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Затем просто следуйте инструкциям по установке. Когда Homebrew установлен, запустите
brew install coreutils
Это установит GNU sort как gsort
, так что вы можете использовать его как sort
на любом GNU Linux.
Кроме того, взгляните на эти вопросы переполнения стека, в которых упоминается несколько методов:
Как я могу рандомизировать строки в файле, используя стандартные инструменты на Redhat Linux
Как я могу перетасовать строки текстового файла в командной строке Unix?
Или взгляните на эту страницу commandlinefu.com:
В OS X, если вы не хотите устанавливать homebrew (но вам это действительно нужно), вы можете использовать perl
или ruby
:
perl -MList::Util -e 'print List::Util::shuffle <>'
или же
ruby -e 'puts STDIN.readlines.shuffle'
Используйте shuf
или sort
из пакета coreutils
, но затем вам нужно добавить /usr/local/bin
в ваш PATH
в файле ~/.bashrc
, например:
export PATH=/usr/local/sbin:/usr/local/bin:$PATH
В качестве альтернативы вы можете попробовать ex
:
ex -s +"%s/^/\=reltimestr(reltime())[-2:].' '" +"sort n" +"%s/^\S* //" +%p -cq! /dev/stdin
Источник: Как перемешать список в vim?
Вы можете установить команду rl
через homebrew (brew install randomize-lines
).
Он достаточно быстрый и имеет возможность ограничить количество возвращаемых элементов, а также указать разделитель (например, пробел вместо перевода строки).
(См. Также https://stackoverflow.com/a/42056195/43615.)