![Эквивалент gnu `sort -R` на OSX?](https://rvso.com/image/1289074/%D0%AD%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%20gnu%20%60sort%20-R%60%20%D0%BD%D0%B0%20OSX%3F.png)
Утилита GNU sort
Text имеет нестандартную -R
опцию для рандомизации строк ввода.
В OSX sort
нет этого расширения. Есть ли аналогичная функциональность в другом текстовом фильтре?
решение1
Если хотите, можете установить GNU sort
через GNUcoreutilsпакет болееДомашнее пиво, который представляет собой менеджер пакетов для 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.
В качестве альтернативы ознакомьтесь с этими вопросами на Stack Overflow, в которых упоминается несколько методов:
Как рандомизировать строки в файле с помощью стандартных инструментов в Redhat Linux
Как перетасовать строки текстового файла в командной строке Unix?
Или взгляните на эту страницу commandlinefu.com:
решение2
В OS X, если вы не хотите устанавливать Homebrew (но вам это действительно нужно), вы можете использовать perl
или ruby
:
perl -MList::Util -e 'print List::Util::shuffle <>'
или
ruby -e 'puts STDIN.readlines.shuffle'
решение3
Используйте shuf
или sort
из coreutils
пакета, но тогда вам придется добавить /usr/local/bin
в свой файл PATH
in ~/.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?
решение4
Вы можете установить rl
команду через homebrew ( brew install randomize-lines
).
Он довольно быстрый и имеет возможность ограничить количество возвращаемых элементов, а также указать разделитель (например, пробел вместо перевода строки).
(Смотрите такжеhttps://stackoverflow.com/a/42056195/43615.)