ReadText可以用来抓取关键字后的所有内容吗?
我坦率地承认,我对R很陌生,所以我可能对如何使用这一点完全错误: 我有一些文本文件,它们只是在一天中收集程序的输出,每个文件一天。有时但并非总是,程序会抛出错误。我正在尝试的是一个R脚本,它将文本文件的特定部分导入到一个向量中,这样我就可以处理列出的错误。在本例中,[错误]之后的文本行。因此,如果我有:ReadText可以用来抓取关键字后的所有内容吗?,r,vector,text,import,R,Vector,Text,Import,我坦率地承认,我对R很陌生,所以我可能对如何使用这一点完全错误: 我有一些文本文件,它们只是在一天中收集程序的输出,每个文件一天。有时但并非总是,程序会抛出错误。我正在尝试的是一个R脚本,它将文本文件的特定部分导入到一个向量中,这样我就可以处理列出的错误。在本例中,[错误]之后的文本行。因此,如果我有: Normal Stuff [ERROR] Bad Error Normal Stuff Normal Stuff [ERROR] Minor Error Normal Stuff 我会以向量结
Normal Stuff
[ERROR] Bad Error
Normal Stuff
Normal Stuff
[ERROR] Minor Error
Normal Stuff
我会以向量结束
错误,小错误
然而,虽然我一直在学习教程,但在数据导入方面做这样的手术我几乎没有经验,因为我主要习惯于导入格式更精确的表。Readtext(或其他软件包)可以这样做吗?或者是一个更容易导入整个文件并通过字符串操作搜索/分割它的区域?您可以在
readLines
的帮助下逐行读取文本,并使用grep
返回其中包含'Error'
的行。假设您的文件名为'temp.txt'
,您可以执行以下操作:
grep('Error', readLines('temp.txt'), value = TRUE)
#[1] "[ERROR] Bad Error" "[ERROR] Minor Error"
如果要删除初始的'ERROR'
部分,可以使用sub
获取:
sub('[ERROR] ', '', grep('Error', readLines('temp.txt'), value = TRUE), fixed = TRUE)
#[1] "Bad Error" "Minor Error"
使用Raku(以前称为Perl6)
raku-ne'.put if.grep(m:i/Error/);'<~/R_Console.txt>tmp.txt
raku-ne'.put if.grep(m:i/Warning/);'<~/R_Console.txt>tmp.txt
raku-ne'.put if.grep(m:i/Error | Warning/);'~/R_Console.txt>tmp.txt
您可能需要考虑实现命令行技巧,以MunGE文本,并使用R为R是最好的-数字压缩和统计分析。
许多海报会告诉你学习BASH、SED、AWK或Perl(5),但我觉得你应该考虑尝试RUKU(PerL6的新名称),这是一个最初在2000年构思的项目。您可以使用上面三个一行程序中的任意一个返回1。错误,2。警告,3。错误或警告
这里有一些关于一行程序的提示。-ne
命令行标志告诉Raku逐行接收输入。Perl系列语言理解称为$的“topic\u变量”的概念,调用.say
只是$的缩写。say
(即“say the current topic”)。“:i
”副词使.grep
不区分大小写。您可以删除“>tmp.txt
”重定向,以便输出打印到终端(或iTerm)控制台。最后,.say
用于生成稍微缩写的输出(用于检查代码).say
可以替换为返回逐字输出的.put
嗯
raku -ne '.put if .grep(m:i/ Error /);' < ~/R_Console.txt > tmp.txt
raku -ne '.put if .grep(m:i/ Warning /);' < ~/R_Console.txt > tmp.txt
raku -ne '.put if .grep(m:i/ Error | Warning /);' < ~/R_Console.txt > tmp.txt