0

这个问题是这个问题的延续和澄清,从文本文件中提取数据我关闭了这个问题,但我仍然难以将答案应用于我的问题。

我坐在一台 Windows 机器上,我正在使用 Putty 将作业提交给超级计算机。作业返回以下格式的文件,http://www.d.umn.edu/~psiders/courses/chem4642/quantumchemsoftware/tutorial/gamess/methanol.out。(请注意,这是一个 .log 文件而不是 .out 文件,这对于阅读以下内容很重要)。

我使用以下 shell 命令查询文件,

grep MAXIMUM FileName.log | awk '{print $4}'

它返回一系列我复制到剪贴板的数字,然后运行以下 R 文件,

MAX1 <- readClipboard(format=1, raw=FALSE) # reading data
plot(MAX1, type="b", ylim=c(0,0.00005), xlim=c(0,50), 
main=bquote(After~ .(length(MAX1))~ iterations))
abline(h=0.00001, col="red")

它返回计算的图形表示。

(其他人使用 perl 脚本执行此操作)。

计算完成后,我从超级计算机中提取文件并将其存储在我的 Windows 系统中。

我想要做的是准备一个可以在 Windows 环境中查询 .log 文件的 R 脚本。

我知道如何更改目录、列出文件并使用 readLines 将文件放入 R,

grep("MAXIMUM",readLines("FileName.log"), value=TRUE) #searching files

但这不会将值作为我可以放入绘图中的一串数字返回。它看起来像没有应用“awk”的字符串。

谁能帮我解决这最后一点?

4

2 回答 2

3

如果ggrepthen 的结果:

read.table(text = g)[, 4]
于 2013-04-23T12:29:08.793 回答
1

如果您想坚持使用 grep 和类似于 awk 的方法,这可能会有所帮助:

selected.lines <- grep("MAXIMUM",readLines("FileName.log"), value=TRUE)
values <- unlist(lapply(selected.lines, function(x) { s<-strsplit(x, " +"); return(s[[1]][5]) }))

但是重新考虑使用 read.table 的方法可能更直接、更快捷。

于 2013-04-23T12:22:32.100 回答