我想将ping时间绘制到特定服务器,因此我正在解析此String的输出:
[1] "PING google.de (216.58.213.195): 56 data bytes"
[2] "64 bytes from 216.58.213.195: icmp_seq=0 ttl=58 time=15.583 ms"
[3] "64 bytes from 216.58.213.195: icmp_seq=1 ttl=58 time=11.057 ms"
[4] "64 bytes from 216.58.213.195: icmp_seq=2 ttl=58 time=10.866 ms"
[5] ""
[6] "--- google.de ping statistics ---"
[7] "3 packets transmitted, 3 packets received, 0.0% packet loss"
[8] "round-trip min/avg/max/stddev = 10.866/12.502/15.583/2.180 ms"
Run Code Online (Sandbox Code Playgroud)
我正在使用正则表达式并搜索'time ='和'ms'来获取时间信息开始和结束的位置.然后我使用Substr来提取数字.实际上它有效,但这是我第一次尝试解析R中的字符串,我的感觉是我的解决方案可能更优雅.你可以帮帮我吗?TY
X <- system("ping -c 3 google.de",intern=TRUE)
start<-regexpr("time=",X)
end<-regexpr(" ms",X)
start<-start+5
end<-end-1
erg<-substr(X,start,end)
erg<-erg[2:4]
erg
erg<-as.numeric(erg)
hist(erg)
Run Code Online (Sandbox Code Playgroud)
我们可以str_extract用来提取数字
library(stringr)
na.omit(as.numeric(str_extract(X, '(?<=time=)[0-9.]+(?=\\s*ms)')))
#[1] 15.583 11.057 10.866
Run Code Online (Sandbox Code Playgroud)
X <- c("PING google.de (216.58.213.195): 56 data bytes",
"64 bytes from 216.58.213.195: icmp_seq=0 ttl=58 time=15.583 ms",
"64 bytes from 216.58.213.195: icmp_seq=1 ttl=58 time=11.057 ms",
"64 bytes from 216.58.213.195: icmp_seq=2 ttl=58 time=10.866 ms",
"", "--- google.de ping statistics ---",
"3 packets transmitted, 3 packets received, 0.0% packet loss",
"round-trip min/avg/max/stddev = 10.866/12.502/15.583/2.180 ms")
Run Code Online (Sandbox Code Playgroud)