Shell实现两组数据的交并差sort-uniq原创
# 1. sort、uniq
再数据分析中,交并差是最常做的分析逻辑。实现起来也有很多方法:SQL,java,Python等等都可以。
那么在linux服务器中如何利用sort、uniq命令快速的进行交并差运算。
- sort:用于对文件内容进行排序。 支持操作[ -T:指定临时文件地址,-S:指定运算是可用内存 ]
- uniq:用于去除文件中重复出现的行,支持操作[ -d:输出重复行,-u:输出不重复的行 ]。
# 有文件 a.txt、b.txt
# 进行交并差运算前,我们先对运算文件进行去重。如果你的文件本身就是不重复的,可以省略这一步。
sort -T ./ -S 5% a.txt | uniq > a_uniq.txt
sort -T ./ -S 5% b.txt | uniq > b_uniq.txt
# 并集
sort -T ./ -S 5% a_uniq.txt b_uniq.txt | uniq > uniq_ab.txt
# 交集
sort -T ./ -S 5% a_uniq.txt b_uniq.txt | uniq -d > inter_ab.txt
# 差集 以下两种方法都可以
# 方法一 先计算交集、再计算差集
sort -T ./ -S 5% a_uniq.txt b_uniq.txt | uniq -d > inter_ab.txt
sort -T ./ -S 5% a_uniq.txt inter_ab.txt | uniq -u > diff_ab.txt
# 方法二 直接计算差集(b文件加载两遍)
sort -T ./ -S 5% a_uniq.txt b_uniq.txt b_uniq.txt | uniq -u > diff_ab.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2. 性能优化
- 再使用的过程中,如果文件数据量特别大,发现计算时间比较长。可以做如下优化,经测试速度大致提升4-5倍左右。但是该参数必须在脚本使用。
# 有文件 a.txt
LC_ALL=C sort -T ./ -S 5% a.txt |LC_ALL=C uniq > a_uniq.txt
1
2
2
# 3. 优点分析
sort、uniq利用磁盘进行计算,可支持运算数据量非常大,取决于磁盘大小。对于CPU和内存的要求比较低。同时加上优化参数,性能很高。比SQL计算耗时低,速度快,支持数据量大。
缺点是:所有数据需要下载到磁盘,需要写Shell脚本。
- 02
- 2025-03-28拍婚纱照 原创04-02
- 03
- 2024-04-05的晚上 原创04-01