linux对csv文件进行排序,Linux指令之利用uniq, sort,对大文件做排序去重

最近在对一些数据做筛洗,涉及到对大文件的排序和去重。 刚开始接触到这个这个任务,我也是想尽各种方法, 想用redis, 想用bitmap。最后发现这些实现的方法都极其繁琐,而且极其吃内存,所以都不是很可行。在百抓挠腮之际,知乎上发现了一个回答,就是利用sort进行排序,然后利用uniq进行去重。

本来刚开始看到这个回答,我是持有怀疑态度的。但是经过实践发现,利用uniq 和 sort的指令,其中间数据不会全部存在内存,而是大部分存在磁盘里,是非常安全的做法。处理了几个4G左右的文件,速度也是非常快的。下面就来描述一下怎么去使用这两个指令:

$ cat testfile #原有内容

test 30

test 30

test 30

Hello 95

Hello 95

Hello 95

Hello 95

Linux 85

Linux 85

使用uniq 命令删除重复的行后,有如下输出结果:

$ uniq testfile #删除重复行后的内容

test 30

Hello 95

Linux 85

但是我们现在又面临一个问题,就是如果重复的行是不相邻的,是没有办法去重的。不慌,可以利用另一个指令,sort + 管道 + uniq:

$ sort testfile1 | uniq

Hello 95

Linux 85

test 30

其次,如果我们还想统计各行在文中出现的次数:

$ sort testfile1 | uniq -c

3 Hello 95

3 Linux 85

3 test 30

最后,我们还想根据出现的次数进行排序,sort 的 -n 参数可以帮助我们实现这个功能,最后重定向到tem,csv的文件中:

sort testfile1 | uniq -c | sort -n > tmp.csv

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值