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?

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)


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'

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?


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 .)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.