500W 文本数据排序去除重复数据

来源:互联网 发布:淘宝bug是什么意思啊 编辑:程序博客网 时间:2024/05/16 15:14

 现在又这样一组数据。数量为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();        }    }


sort 参数列表
长选项必须使用的参数对于短选项时也是必需使用的。排序选项:  -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         显示版本信息并退出


原创粉丝点击