【问题标题】:Running R + awk from bash从 bash 运行 R + awk
【发布时间】:2015-11-28 18:48:15
【问题描述】:

一个脚本在 R 上运行良好,但在使用来自 bash 的 R q -e 执行时失败。

The script 在 R 上运行良好的是:

R> sizes <- read.table(pipe("ls -l /tmp | awk '!/^total/ {print $5}'"))
R> summary(sizes)

来自 bash 的命令模式遵循 a previous discussion,但生成了错误消息:

R -q -e "x <- read.table(pipe("ls -l /tmp | awk '!/^total/ {print $5}'"));summary(x)"
awk: line 1: extra ')'
awk: line 1: extra ')'
awk: line 1: syntax error at or near ;

上面的命令有什么问题?

root@kali:~# uname -a
Linux kali 3.18.0-kali3-586 #1 Debian 3.18.6-1~kali2 (2015-03-02) i686 GNU/Linux

【问题讨论】:

  • 假设您使用的是 bash。你的问题是shell引用。您需要在命令中转义第二个和第三个"。像这样:\"。您也可以使用单引号而不是双引号,但是您将不得不转义 awk 命令周围的单引号。
  • @Bhas 你能给出正确的语法吗?
  • @Pascal。可能不是。我只是尝试转义内部双引号。这给出了来自 bash 的错误消息。转义 ^! 似乎确实有效,但 R 给出了错误消息:Error: '\!' is an unrecognized escape ....。不转义 ! 会生成 bash 错误消息:!/total/: event not found。所以似乎很难让这个工作。需要另一种解决方案,但我没有任何线索。真正的 bash 专家需要对此进行研究。
  • @Bhas 是的,我也按照你的建议尝试逃跑,但没有运气。

标签: r


【解决方案1】:

试试这个

ls -l /tmp | awk '!/^total/ {print $5}' | R --slave -e 'x &lt;- scan(file="stdin"); summary(x)'

如果您尝试获取特定目录层次结构中所有文件的统计信息,这样可能会更好:

find /tmp -type f -exec du {} \; | awk '{print $1}' | R --slave -e 'x &lt;- scan(file="stdin"); summary(x)'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2012-01-07
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多