Установить shuf на OS X?

49

В Ubuntu Linux есть отличный инструмент под названием shuf, который работает как head, за исключением того, что он дает вам десять случайных строк. Я не мог найти это на Homebrew. Какой самый простой способ установить его на OS X?

Несчастный кот
источник
2
Это часть пакета текстовых утилит gnu. Кажется, это часть coreutils, но я не знаю, как вещи упакованы на домашнем пиве.
jl8e

Ответы:

78

Вы можете установить coreutils с помощью brew install coreutils.

shufбудет связан как gshuf. Прочитайте предостережения при установке coreutils.

Джей Томпсон
источник
2
Похоже, предостережение заключается в том, что вы не должны использовать собственные имена инструментов, а ставить перед ними префикс g (например, «gshuf»), верно?
Несчастный кот
2
Да, или при желании настройте свой PATH так, чтобы вы получили то, что ожидаете.
Джей Томпсон
3
brew install coreutilsgпо умолчанию устанавливает утилиты с префиксом на osx, поэтому вы можете установить его с помощью приведенной выше команды.
Брэд Паркс
13

Еще одно решение состоит в том, чтобы узнать об инструментах, предоставляемых поставщиком. Конечно , вы могли бы цепь jot, paste, sort, cut, headи получить те же результаты.

jot -r "$(wc -l FILE)" 1 |
paste - FILE |
sort -n |
cut -f 2- |
head -n 10
  • jot производит случайное число от 1 до количества строк в FILE для каждой строки
  • вставить вставляет случайное число в каждую строку в файле
  • сортировать сортирует числовые строки
  • cut удаляет случайное число из каждой строки
  • голова выводит первые 10 строк
fd0
источник
2
Мне очень нравится суть этого ответа, вы никогда не знаете, когда вы захотите сделать то же самое на другом компьютере, где по каким-либо причинам вы не можете установить дополнительные инструменты
forquare
Я никогда не слышал об этом jotраньше. Спасибо за расширение моих знаний.
tommy.carstensen
9

Вы можете установить coreutils с Macports как

sudo port install coreutils

Это поместит утилиты ядра GNU в / opt / local / bin с префиксом ag

например gshuf

user151019
источник
2
Я использовал этот с macports, спасибо. Я не очень люблю Homebrew
Зоргатоне
Отличный ответ, если у вас есть права sudo. Я не.
tommy.carstensen
@ tommy.carstensen Тогда спросите своего администратора - вам будет сложно сделать это по какой-то причине
user151019
3

Другой вариант - установить randomize-lines(homebrew) пакет, в котором есть rlкоманда, аналогичная функциональности 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
rogerdpack
источник