如何在R中执行已加载包的静态计数?

时间:2016-11-21 23:11:17

标签: r org-mode xargs

我想搜索目录结构来计算我加载各种R包的次数。源包含在.org和.R文件中。我愿意假设“库(”是我关心的任何一行上的第一个非空白条目,我愿意假设每行最多只有一个这样的电话。

 find . -regex ".*/.*\.org" -print 

获取.org文件列表,

find . -regex ".*\.\(org\|R\)$" -print 

获取.org和.R文件列表(感谢https://unix.stackexchange.com/questions/15308/how-to-use-find-command-to-search-for-multiple-extensions)。

鉴于特定文件,

grep -h "library(" file | sed 's/library(//' | sed 's/)//'

获取包名称。我想将它们连接在一起,然后可能将输出重定向到一个文件,我可以使用它来计算频率。

看似简单的

find . -regex ".*/.*\.org" -print | xargs -0 grep -h "library("  | sed 's/library(//' | sed 's/)//'

不起作用;我得到了

 find . -regex ".*/.*\.org" -print | xargs -0 grep -h "library("  |   sed 's/library(//' | sed 's/)//'
Usage: /usr/bin/grep [OPTION]... PATTERN [FILE]...
Try '/usr/bin/grep --help' for more information.

我不知道下一步该做什么。

我也试过

find . -regex ".*/.*\.org" -exec grep -h "library(" "{}" "\;"

得到了

find . -regex ".*/.*\.org" -exec grep -h "library(" "{}" "\;"
find: missing argument to `-exec'

看起来很简单。我错过了什么?

更新:在上面的xargs中添加-t显示第一个命令:

grep -h library ./dirname/filename.org

后面可能是所有匹配文件的列表,其中包含相对于PWD的路径。实际上,如果我只搜索.org文件,那就有效;如果我也添加.R文件,我会得到“xargs:argument line too”。我认为这意味着xargs将整个文件列表作为参数传递给一次grep调用。

1 个答案:

答案 0 :(得分:0)

find ... -print | xargs

find ... -print0 | xargs -0

find ... -print0 | xargs损坏

find ... -print | xargs -0损坏了(用过的东西)

另外,请不要:

grep -h "library(" | sed 's/library(//' | sed 's/)//'

速度更快时:

grep -h "library(" | sed -e 's/library(//' -e 's/)//'

这更快,更有趣:

grep -h "library(" | grep -o '(.*)' | tr -d ' ()'