R语言处理大文本

作者:hack1990 时间:14-10-17 阅读数:591人阅读

最近要处理一个近400G的文本,由于格式复杂且无规律,因此需要对每一行进行相应的处理。因为文件过大使用py和java测试均不理想,于是想用awk来处理。但处理后的结果数和wc -l filename的数量对不上。


看来awk也不行,用R语言写了一个脚本也在处理到两百多万行的时候停止。脚本如下:


rm(list=ls());

setwd("C:\\Users\\b4dboy\\Documents");

options(encoding = "UTF-8");

con <- file("largeText.txt", "r");

while(length(lines <- readLines(con, n = 100000, encoding = "UTF-8", skipNul = TRUE)) != 0) {

 for(line in lines) {

   #code...

 }

}

close(con);


用R语言取出止住行转成16进制发现了一个值为1A的字符, 这是一个控制字符(^Z), ascii为32,awk和脚本之所以停下来估计就是因为它了,因此只要将脚本读文件的方式改为二进制即可。


用awk处理的话可先用tr命令将这种字符替换掉再进行处理


tr -d '\15\32' < filename.txt > outfile.txt


发表评论