任何包中是否有任何函数可以读取带有正则表达式的文本文件并返回找到的匹配项的字符串数。像gsubfn read.pattern可以找到并提取模式,但不能返回行号,grep不能直接读取文件。例如:
文件:
.122448110000D+06 .400000000000D+01
3 15 3 23 10 0 0.0 .267305411398D-03 .161435309564D-10 .000000000000D+01
.510000000000D+02 .625000000000D-01 .440982654411D-08 .306376855997D+00
5 15 3 23 11 59 44.0 -.263226218521D-03 .488853402202D-11 .000000000000D+01
模式:reg="^ *\\d+ +(?:[0-9]+ +){5}[.0-9]+.*$"
用于第2和第4行匹配。所以我通常想要的是:
>file.grep(file,reg)
[1] 2 4
有什么类似的吗?我在处理这些事情时得到了一般的哲学是readLines
,然后用grep
创造性,当文件不那么大时这很好。但是我在这里看到很多人遇到大型而不是表结构数据集的问题,可以用这样的工具解决问题(或readLines
支持正则表达式skip
参数),我想知道是否有人做了什么像那样。
答案 0 :(得分:2)
EDITED1
我刚发现另一篇与此问题相关的帖子,提供了另一种解决方案: grep while reading file
原始帖子
这是你在找什么?
library(gsubfn)
cat(" .122448110000D+06 .400000000000D+01
3 15 3 23 10 0 0.0 .267305411398D-03 .161435309564D-10 .000000000000D+01
.510000000000D+02 .625000000000D-01 .440982654411D-08 .306376855997D+00
5 15 3 23 11 59 44.0 -.263226218521D-03 .488853402202D-11 .000000000000D+01", file = "test.txt")
read.pattern(text = readLines("test.txt"), pattern = "^ *\\d+ +(?:[0-9]+ +){5}[.0-9]+.*$")