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 即为最终结果

posted @ 2022-04-07 10:59  ifnk  阅读(618)  评论(0编辑  收藏  举报