linux 大文件 排序去重
有的日志文件 动不动就几十个G
比内存都大 ,linux 用 sort 命令 害怕内存不足了
这时候 可以 用 -T
选项 ,他会指定一个临时文件 ,这样先把结果 放到临时文件里不会占内存 会跑满cpu但是内存占用只有0.几
还有一种方法 是 先用 split
分割命令 ,分割成多个文件 ,对他们进行排序 ,然后 在 -m
参数 将几个排序好的文件进行合并。
然后 对结果 执行 uniq 即可
命令如下
先 split event1.csv -l 100000
按行数分割文件
会看到 x** 起始的 分割文件结果
然后 ls x* | xargs -I {} sh -c "sort '{}' -T /home/ifnk/tmp > '{}.sort'"
遍历这些分割文件 ,分别对他们进行排序 ,输出结果 分别为 x**.sort 结果 文件
xargs 里面 {} 这个即为item ,但是他不好做 字符串拼接 ,所以我这里用 sh -c 命令 搭配 单引号 完成 文件名拼接
重点在这的-T设置tmp参数,sort是会写缓存文件的工具,不会
一次性读取文件到内存,所以内存大小无所谓,但是默认会写系统区,可能造成系统区空间不够
所以找个比较大的地方放
接着 执行 "sort -m ls *.sort
> result" 将 结果 合并 成一个
sort -m
-m 将几个排序好的文件进行合并。
然后 执行 uniq result > dudu
即可 dudu
即为最终结果