R语言处理大文本

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

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

1
2
3
4
5
6
7
8
9
10
11
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命令将这种字符替换掉再进行处理。

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