如何用某些文本解析一个巨大的文件

时间:2014-05-12 16:13:44

标签: regex r

我有这个庞大的文件,里面有很多条目。我想只读取包含某些值的条目,例如" db_call"。

我试过这个:

df<-read.table(text=readLines("H:/ap.log")[grepl("db_call")])

我收到此错误:

论证&#34; x&#34;缺少,没有默认

任何想法?

1 个答案:

答案 0 :(得分:5)

创建测试文件:

writeLines(c("aaa 11","aaa 22","bbb 33"),con="test.txt")

蛮力方法(基本上是你在上面尝试的方法)是读取整个事物,然后只拍摄你想要的部分:

xx <- readLines("test.txt")
xx <- xx[grepl("aaa",xx,fixed=TRUE)]
##  (fixed=TRUE is slightly faster if you don't need regular expressions)
read.table(text=xx)

如果您有一个大文件,我建议您在系统级别使用grep(如果您需要安装Cygwin,因为您似乎在使用Windows)并使用pipe,例如

测试 - 查看包含目标字符串的行数:

system('grep "aaa" <text.txt | wc')

只读包含aaa的行:

read.table(pipe('grep "aaa" <test.txt'))

这比将整个东西读入R然后选择你想要的部分要高效得多。