85 votes

Installer shuf sur OS X ?

Ubuntu Linux dispose d'un excellent outil appelé shuf, qui fonctionne comme head, sauf qu'il vous donne dix lignes aléatoires. Je ne l'ai pas trouvé sur Homebrew. Quel est le moyen le plus simple de l'installer sur OS X ?

2 votes

Il fait partie du paquetage gnu text utilities. Il semble faire partie de coreutils, mais je ne sais pas comment les choses sont empaquetées sur homebrew.

134voto

Jay Thompson Points 4026

Vous pouvez installer coreutils avec brew install coreutils .

shuf seront liés en tant que gshuf . Lisez les avertissements lorsque vous installez coreutils.

2 votes

L'avertissement semble simplement être que vous ne devez pas utiliser les noms propres des outils, mais les préfixer avec g (comme "gshuf"), non ?

2 votes

Yep, ou éventuellement configurer votre PATH de sorte que vous obteniez ce que vous attendez.

3 votes

brew install coreutils installe les utilitaires avec le préfixe g par défaut sur osx, vous pouvez donc l'installer en utilisant la commande ci-dessus.

22voto

Michael Zhou Points 167

Une autre solution encore consiste à se renseigner sur les outils fournis par le vendeur. Vous pouvez certainement enchaîner jot , paste , sort , cut , head et obtenir les mêmes résultats.

jot -r "$(wc -l FILE)" 1 |
paste - FILE |
sort -n |
cut -f 2- |
head -n 10
  • jot produit pour chaque ligne un nombre aléatoire compris entre 1 et le nombre de lignes de FILE
  • paste colle le nombre aléatoire à chaque ligne du FICHIER
  • sort trie numériquement chaque ligne
  • cut supprime le numéro aléatoire de chaque ligne
  • head sort les 10 premières lignes

2 votes

J'aime beaucoup l'essence de cette réponse, on ne sait jamais quand on peut vouloir faire la même chose sur une autre machine où l'on ne peut pas installer d'outils supplémentaires pour une raison quelconque.

1 votes

Je n'avais jamais entendu parler de jot avant. Merci d'avoir élargi mes connaissances.

0 votes

Bien que cette réponse fonctionne en quelque sorte, par défaut, jot ne génère pas autant d'aléatoire, dans la version actuelle, il semble qu'il ne génère que des entiers de 1 à 100. Donc, même si cela vous donnera un ordre différent des lignes, il sera loin de l'ordre uniforme que vous obtiendriez à partir de shuf

12voto

yoliho Points 340

Vous pouvez installer coreutils avec Macports comme

sudo port install coreutils

Cela mettra GNU core utils dans /opt/local/bin avec un g en préambule.

par exemple gshuf

Plus de détails sur le paquet coreutils .

2 votes

J'ai utilisé celui-ci avec macports, merci. Je n'aime pas beaucoup Homebrew

0 votes

Excellente réponse si vous avez les droits sudo. Je ne les ai pas.

0 votes

@tommy.carstensen Demandez alors à votre administrateur - il vous aura rendu la tâche difficile pour une bonne raison.

8voto

Vous pouvez utiliser sort -R

$ seq 5 | sort -R
2
3
4
1
5

3 votes

Bonne réponse, et fonctionne à la fois pour BSD et GNU. sort .

4voto

rogerdpack Points 688

Une autre option consiste à installer randomize-lines (homebrew), qui dispose d'un paquet de type rl qui a une fonctionnalité similaire à celle de shuf.

Usage: rl [OPTION]... [FILE]...
Randomize the lines of a file (or stdin).

  -c, --count=N  select N lines from the file
  -r, --reselect lines may be selected multiple times
  -o, --output=FILE
                 send output to file
  -d, --delimiter=DELIM
                 specify line delimiter (one character)
  -0, --null     set line delimiter to null character
                 (useful with find -print0)
  -n, --line-number
                 print line number with output lines
  -q, --quiet, --silent
                 do not output any errors or warnings
  -h, --help     display this help and exit
  -V, --version  output version information and exit

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X