在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"
答案 0 :(得分:2)
首先将输出传输到实际的文本文件:
> system("ps aux | grep ssh") > output.txt
然后使用read.table
:
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))