Équivalent de gnu `sort -R` sur OSX?

35

Le GNU sort utilitaire de texte dispose d'un non standard -R option pour randomiser les lignes d'entrée.

OSX sort n'a pas cette extension. Des fonctionnalités similaires sont-elles disponibles dans un autre filtre de texte?

phs
la source

Réponses:

49

Si vous voulez, vous pouvez installer GNU sort via GNU coreutils paquet sur Homebrew , gestionnaire de paquets pour OS X.

Exécuter ceci installerait Homebrew.

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

Ensuite, suivez simplement les instructions d'installation. Quand Homebrew est installé, lancez

brew install coreutils

Cela installera GNU en tant que gsortafin que vous puissiez l'utiliser comme sort sur tout GNU Linux.


Vous pouvez également consulter ces questions Stack Overflow, qui mentionnent quelques méthodes:

Comment puis-je randomiser les lignes d'un fichier à l'aide d'un outil standard sous Redhat Linux
Comment puis-je mélanger les lignes d'un fichier texte en ligne de commande Unix?

Ou jetez un oeil à cette page commandlinefu.com:

Aléatoire des lignes (en face de | sort)

slhck
la source
L'option homebrew fonctionne, tout comme les constructions awk ou perl liées (bien que j'imagine qu'elles sont plus lentes). Les autres ne sont pas utilisables, car elles sont uniquement GNU.
phs
5

Sous OS X, si vous ne souhaitez pas installer homebrew (mais vous devriez le faire), vous pouvez utiliser perl ou ruby:

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

ou

ruby -e 'puts STDIN.readlines.shuffle'
mivk
la source
0

Utilisation shuf ou sort de coreutils paquet, mais alors vous devez ajouter /usr/local/bin à ton PATH dans ~/.bashrc fichier, par exemple:

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

Sinon, vous pouvez essayer ex:

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

La source: Comment mélanger une liste dans vim?

kenorb
la source
0

Vous pouvez installer le rl commande via homebrew ( brew install randomize-lines ).

Il est assez rapide et propose des options permettant de limiter le nombre d'éléments renvoyés, ainsi que de spécifier le délimiteur (espace au lieu d'un saut de ligne, par exemple).

(Voir également https://stackoverflow.com/a/42056195/43615 .)

SuperTempel
la source