Equivalente ao gnu `sort -R` no OSX?

37

O sortutilitário de texto GNU possui uma -Ropção não padrão para randomizar linhas de entrada.

OSX sortnão tem esta extensão. Existe funcionalidade semelhante disponível em outro filtro de texto?

phs
fonte

Respostas:

50

Se desejar, você pode instalar o GNU sortatravés do pacote coreutils do GNU sobre o Homebrew , que é um gerenciador de pacotes para o OS X.

Executar isso instalaria o Homebrew.

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Em seguida, basta seguir as instruções de instalação. Quando o Homebrew estiver instalado, execute

brew install coreutils

Isso instalará a classificação GNU como gsort, para que você possa usá-lo como sortem qualquer GNU Linux.


Como alternativa, dê uma olhada nessas perguntas do Stack Overflow, que mencionam alguns métodos:

Como aleatoriamente as linhas de um arquivo usando ferramentas padrão no Redhat Linux
Como embaralhar as linhas de um arquivo de texto na linha de comando do Unix?

Ou dê uma olhada nesta página commandlinefu.com:

Aleatorizar linhas (oposto de | classificar)

slhck
fonte
A opção homebrew funciona, assim como as construções awk ou perl vinculadas (embora eu imagine que sejam mais lentas.) O resto não é possível, pois são apenas GNU.
phs 12/09
7

No OS X, se você não deseja instalar o homebrew (mas realmente deve), você pode usar perlou ruby:

perl -MList::Util -e 'print List::Util::shuffle <>'

ou

ruby -e 'puts STDIN.readlines.shuffle'
mivk
fonte
0

Use shufou sortdo coreutilspacote, mas então você tem que adicionar /usr/local/binao seu PATHno ~/.bashrcarquivo, por exemplo:

export PATH=/usr/local/sbin:/usr/local/bin:$PATH

Como alternativa, você pode tentar ex:

ex -s +"%s/^/\=reltimestr(reltime())[-2:].' '" +"sort n" +"%s/^\S* //" +%p -cq! /dev/stdin

Fonte: Como embaralhar uma lista no vim?

kenorb
fonte
0

Você pode instalar o rlcomando via homebrew ( brew install randomize-lines).

É bastante rápido e possui opções para limitar o número de itens retornados, além de especificar o delimitador (espaço em vez de avanço de linha, por exemplo).

(Consulte também https://stackoverflow.com/a/42056195/43615 .)

SuperTempel
fonte