现在又这样一组数据。数量为500W条数据,大小约1G
班级,性别,年龄,........
1,w,15
1,w,13
1,w,20
1,w,11
1,m,15
1,m,13
1,m,14
1,m,17
2,w,18
2,w,13
2,w,14
2,w,12
............
要筛选出每个班级 男生、女生最大年龄的名字。又有一些其他列信息比如地址再次省略。
我使用的方式是先用linux命令sort对文本进行排序。
sort -t, -k1rg -k4rg mid.txt >sort.txt
如果是数值排序很容易出现乱序。大家很容易误使用-n
应该使用sort -g 参数。
对于sort命令使用方法可以参考:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html
然后再用java对大文本进行去除重复数据。
FileRead fileRead = new FileRead("D:\\云转码统计\\成品地址\\sort.txt");
FileWrite fileWrite = new FileWrite("D:\\云转码统计\\成品地址\\url.txt");
String temp = null;
int i=0;
//只需要取出 k0 ,k1 重复列 的第一行数据
public void readContent() {
try {
String content = null;
while ((content = fileRead.readLine()) != null && content != "") {
if (temp == null) {
temp = content;
fileWrite.write(mediaPath(content));
System.out.println(++i);
continue;
}
String[] tempSplit = temp.split(",");
String[] split = content.split(",");
if (tempSplit[0].equals(split[0]) && tempSplit[1].equals(split[1])) {
continue;
}
fileWrite.write(mediaPath(content));
System.out.println(++i);
temp = content;
}
} catch (Exception e) {
e.printStackTrace();
}
}
长选项必须使用的参数对于短选项时也是必需使用的。 排序选项: -b, --ignore-leading-blanks 忽略前导的空白区域 -d, --dictionary-order 只考虑空白区域和字母字符 -f, --ignore-case 忽略字母大小写 -g, --general-numeric-sort 按照常规数值排序 -i, --ignore-nonprinting 只排序可打印字符 -M, --month-sort 比较 (未知) < "一月" < ... < "十二月" 在LC_ALL=C 时为(unknown) < `JAN' < ... < `DEC' -h, --human-numeric-sort 使用易读性数字(例如: 2K 1G) -n, --numeric-sort 根据字符串数值比较 -R, --random-sort 根据随机hash 排序 --random-source=文件 从指定文件中获得随机字节 -r, --reverse 逆序输出排序结果 --sort=WORD 按照WORD 指定的格式排序: 一般数字-g,高可读性-h,月份-M,数字-n, 随机-R,版本-V -V, --version-sort 在文本内进行自然版本排序 其他选项: --batch-size=NMERGE 一次最多合并NMERGE 个输入;如果输入更多 则使用临时文件 -c, --check, --check=diagnose-first 检查输入是否已排序,若已有序则不进行操作 -C, --check=quiet, --check=silent 类似-c,但不报告第一个无序行 --compress-program=程序 使用指定程序压缩临时文件;使用该程序 的-d 参数解压缩文件 --debug 为用于排序的行添加注释,并将有可能有问题的 用法输出到标准错误输出 --files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被 指定为"-"则从标准输入读文件名 -k, --key=位置1[,位置2] 在位置1 开始一个key,在位置2 终止(默认为行尾) 参看POS 语法。 -m, --merge 合并已排序的文件,不再进行排序 -o, --output=文件 将结果写入到文件而非标准输出 -s, --stable 禁用last-resort 比较以稳定比较算法 -S, --buffer-size=大小 指定主内存缓存大小 -t, --field-separator=分隔符 使用指定的分隔符代替非空格到空格的转换 -T, --temporary-directory=目录 使用指定目录而非$TMPDIR 或/tmp 作为 临时目录,可用多个选项指定多个目录 --parallel=N 将同时运行的排序数改变为N -u, --unique 配合-c,严格校验排序;不配合-c,则只输出一次排序结果 -z, --zero-terminated 以0 字节而非新行作为行尾标志 --help 显示此帮助信息并退出 --version 显示版本信息并退出