Установить 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 строк

2
Мне очень нравится суть этого ответа, вы никогда не знаете, когда вы захотите сделать то же самое на другом компьютере, где по каким-либо причинам вы не можете установить дополнительные инструменты
forquare

Я никогда не слышал об этом jotраньше. Спасибо за расширение моих знаний.
tommy.carstensen

9

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

sudo port install coreutils

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

например gshuf


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.