在OS X上安装shuf?


49

Ubuntu Linux有一个很棒的工具叫做shuf,它的工作原理类似于head,不同之处在于它可以随机分配十行。我在Homebrew上找不到。在OS X上安装它的最简单方法是什么?


2
它是gnu文本实用程序包的一部分。似乎是coreutils的一部分,但我不知道如何将这些东西打包在自制软件上。
2014年

Answers:


78

您可以使用来安装coreutils brew install coreutils

shuf将链接为gshuf。在安装coreutils时,请阅读警告。


2
需要说明的是,您不应该使用工具的专有名称,而应给它们加上g前缀(例如“ gshuf”),对吗?
Unfun Cat 2014年

2
是的,或者选择配置您的PATH,以便您获得期望的结果。
2014年

3
brew install coreutilsg默认情况下,在osx上安装带有前缀的utils ,因此您可以使用上述命令进行安装。
布莱德·帕克斯

13

另一个解决方案是了解供应商提供的工具。当然,你可以链jotpastesortcuthead并得到相同的结果。

jot -r "$(wc -l FILE)" 1 |
paste - FILE |
sort -n |
cut -f 2- |
head -n 10
  • jot产生从1到FILE中每一行的行数的随机数
  • 粘贴将随机数粘贴到FILE中的每一行
  • 每行对数字排序
  • 剪切从每行删除随机数
  • 头输出前10行

2
我真的很喜欢这个答案的本质,您永远不知道什么时候您可能想在另一台计算机上由于某种原因而无法安装额外的工具做同样的事情
将于2015年

我以前从未听说jot过。感谢您扩展我的知识。
tommy.carstensen

9

您可以将coreutils与Macports一起安装为

sudo port install coreutils

这会将GNU核心utils放在/ opt / local / bin中,并加上ag

例如 gshuf


2
我将它与macports一起使用了,谢谢。我不太喜欢自制啤酒
Zorgatone

如果您有sudo权限,这是一个很好的答案。我不。
tommy.carstensen

@ tommy.carstensen然后,请教您的管理员-由于
某些

3

另一个选择是安装randomize-lines(自制)软件包,该软件包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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.