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

 现在又这样一组数据。数量为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         显示版本信息并退出


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值