R - 在终端中运行命令并将输出保存到数据帧

时间:2016-08-29 15:06:24

标签: mysql r macos terminal

在OSX上,我使用system()函数从R控制台在终端中运行命令,作为我编写的脚本的一部分。该脚本需要通过ssh隧道连接到MySQL()数据库,然后在命令行“ps aux | grep ssh”中键入以查看我连接的隧道。例如,一些输出:

> system("ps aux | grep ssh")
Home            50915   0.0  0.0  2501204   3264   ??  S    10:32AM   server info
Home            50092   0.0  0.0  2504172   3048   ??  Ss    9:35AM   server2 info
Home            50090   0.0  0.0  2501372    480   ??  Ss    9:35AM   server3 info
Home             1155   0.0  0.0  2544220   1368   ??  S    Thu07PM   server4 info
Home            51333   0.0  0.0  2434840    800   ??  S    11:00AM   0:00.00 grep ssh
Home            51331   0.0  0.0  2438508   1124   ??  S    11:00AM   0:00.00 sh -c ps aux | grep ssh


我想将此输出转换为数据帧,但不能。像as.data.frame(system("ps aux | grep ssh"))这样的函数不能像我希望它们一样工作。

对此的任何想法将不胜感激!

编辑 - 只想强调一条建议评论中的错误

> read.table(pipe("ps aux | grep ssh"))
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 1 did not have 34 elements
> pipe("ps aux | grep ssh")
        description               class                mode                text              opened            can read           can write 
"ps aux | grep ssh"              "pipe"                 "r"              "text"            "closed"               "yes"               "yes" 

2 个答案:

答案 0 :(得分:2)

首先将输出传输到实际的文本文件:

> system("ps aux | grep ssh") > output.txt

然后使用read.table

将此文件读入R中
df.output <- read.table(file="output.txt", header=FALSE, sep="")

注意:使用sep=""(实际上是read.table的默认值)会将任何类型/数量的空白视为列之间的分隔符。这应该包括您从Linux呼叫中获得的输出。

答案 1 :(得分:0)

您可以使用intern=TRUE

更接近(使用角色向量)
as.data.frame(system("ps aux | grep ssh", intern=TRUE))