¿Equivalente de gnu `sort -R` en OSX?

37

La sortutilidad de texto GNU presenta una -Ropción no estándar para aleatorizar líneas de entrada.

OSX sortno tiene esta extensión. ¿Hay una funcionalidad similar disponible en otro filtro de texto?

phs
fuente

Respuestas:

50

Si lo desea, puede instalar GNU a sorttravés del paquete coreutils de GNU sobre Homebrew , que es un administrador de paquetes para OS X.

Ejecutar esto instalaría Homebrew.

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

Luego solo siga las instrucciones de instalación. Cuando se instala Homebrew, ejecuta

brew install coreutils

Esto instalará GNU sort como gsort, por lo que puede usarlo como sorten cualquier GNU Linux.


Alternativamente, eche un vistazo a estas preguntas de desbordamiento de pila, que mencionan un par de métodos:

¿Cómo puedo aleatorizar las líneas en un archivo usando herramientas estándar en Redhat Linux?
¿Cómo puedo mezclar las líneas de un archivo de texto en la línea de comandos de Unix?

O eche un vistazo a esta página de commandlinefu.com:

Aleatorizar líneas (opuesto a | ordenar)

slhck
fuente
La opción homebrew funciona, al igual que las construcciones awk o perl vinculadas (aunque imagino que son más lentas). El resto no funciona, ya que son solo GNU.
phs
7

En OS X, si no desea instalar homebrew (pero realmente debería hacerlo), puede usar perlo ruby:

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

o

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

Uso shufo sortdel coreutilspaquete, pero luego súmale /usr/local/bina tu PATHen el ~/.bashrcarchivo, por ejemplo:

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

Alternativamente, puedes probar ex:

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

Fuente: ¿Cómo barajar una lista en vim?

kenorb
fuente
0

Puede instalar el rlcomando a través de homebrew ( brew install randomize-lines).

Es bastante rápido y tiene opciones para limitar el número de elementos devueltos, así como especificar el delimitador (espacio en lugar de avance de línea, por ejemplo).

(Ver también https://stackoverflow.com/a/42056195/43615 .)

SuperTempel
fuente