最近要处理一个近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) { } } close(con);
|
用R语言取出止住行转成16进制发现了一个值为1A的字符, 这是一个控制字符(^Z), ascii为32,awk和脚本之所以停下来估计就是因为它了,因此只要将脚本读文件的方式改为二进制即可。
用awk处理的话可先用tr命令将这种字符替换掉再进行处理。
1
| tr -d '\15\32' < filename.txt > outfile.txt
|