我有一个Linux文本文件(日志文件),该文件是从Windows中的R Studio中读取的。
我已经安装了enc
软件包,以使用可以读取UTF-8文件的read_lines_enc函数。
到目前为止很好。
在R中读取文件后,我得到以下结构
str(LogFail)
# 'utf8' chr [1:1321]
这是一个字符数组(每行是我正在读取的文本文件中的一行)
我现在想找到一种方法来选择包含任何一组特定关键字的行号,例如:c("fail", "error")
。选择了这些行的编号后,我想在该行的前后保留两到三个句子(试图以这种方式捕获出现错误的原因)。
您能帮我解决这两个子问题吗?
总结:
对于可以使用的图书馆的建议将不胜感激。
非常感谢。 问候 亚历克斯
答案 0 :(得分:0)
keywords<-c("fail","error")
wordrange<-2 # Number of lines before and after identified ones to grab
KWind<-grep(paste0(keywords,collapse="|"),LogFail) # identify the indexes of lines with keywords
# ** (see below)
grablist<-as.vector(sapply(KWind, function(x) (x-wordrange):(x+wordrange)))
grablist<-unique(grablist[grablist>0 & grablist<=length(LogFail)]) # remove possible subzero cases, overlaps and indexes larger than the actual LogFail vector
LogFail[grablist] # Your desired list
为了提高可读性,您可以考虑在我放置**的位置添加以下行:
LogFail[KWind]<-paste("*", LogFail[KWind])
这将使带有关键字的实际行更加清晰。