R cran基于关键字的子集文本行

时间:2018-11-07 13:55:07

标签: r string

我有一个Linux文本文件(日志文件),该文件是从Windows中的R Studio中读取的。

我已经安装了enc软件包,以使用可以读取UTF-8文件的read_lines_enc函数。

到目前为止很好。

在R中读取文件后,我得到以下结构

str(LogFail)
# 'utf8' chr [1:1321] 

这是一个字符数组(每行是我正在读取的文本文件中的一行)

我现在想找到一种方法来选择包含任何一组特定关键字的行号,例如:c("fail", "error")。选择了这些行的编号后,我想在该行的前后保留两到三个句子(试图以这种方式捕获出现错误的原因)。

您能帮我解决这两个子问题吗?

总结:

  1. 首先找到包含一组特定关键字中的任何单词的行号。
  2. 然后从初始文件开始,在第1步中收集行号之前和之后保留几行。

对于可以使用的图书馆的建议将不胜感激。

非常感谢。 问候 亚历克斯

1 个答案:

答案 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])

这将使带有关键字的实际行更加清晰。