I'd use scan
for this, in case you know how many lines the log has :
scan("foo.txt",sep="
",what="char(0)",skip=100)
If you have no clue how many you need to skip, you have no choice but to move towards either
- reading in everything and taking the last n lines (in case that's feasible),
- using
scan("foo.txt",sep="
",what=list(NULL))
to figure out how many records there are, or
- using some algorithm to go through the file, keeping only the last n lines every time
The last option could look like :
ReadLastLines <- function(x,n,...){
con <- file(x)
open(con)
out <- scan(con,n,what="char(0)",sep="
",quiet=TRUE,...)
while(TRUE){
tmp <- scan(con,1,what="char(0)",sep="
",quiet=TRUE)
if(length(tmp)==0) {close(con) ; break }
out <- c(out[-1],tmp)
}
out
}
allowing :
ReadLastLines("foo.txt",100)
or
ReadLastLines("foo.txt",100,skip=1e+7)
in case you know you have more than 10 million lines. This can save on the reading time when you start having extremely big logs.
EDIT : In fact, I'd not even use R for this, given the size of your file. On Unix, you can use the tail command. There is a windows version for that as well, somewhere in a toolkit. I didn't try that out yet though.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…