花开不停 花开不停
首页
  • 追忆杂谈
  • 书信往来
  • 旅行记录
  • 文定之喜
  • 黄金屋-颜如玉
  • 程序化广告
  • 禅茶一味
  • 随写编年
  • 家人物语
  • 追忆青春
  • 大千世界
  • Shell
  • Java
  • Spark
  • Hadoop
  • ClickHouse
  • MySQL
  • PostgreSQL
  • MongoDB
  • 调度器
  • Zookeeper
  • Kafka
  • Flume
  • 学习周刊
关于
  • 分类
  • 标签
  • 归档
开往 (opens new window)

花开不停

此心光明,亦复何言
首页
  • 追忆杂谈
  • 书信往来
  • 旅行记录
  • 文定之喜
  • 黄金屋-颜如玉
  • 程序化广告
  • 禅茶一味
  • 随写编年
  • 家人物语
  • 追忆青春
  • 大千世界
  • Shell
  • Java
  • Spark
  • Hadoop
  • ClickHouse
  • MySQL
  • PostgreSQL
  • MongoDB
  • 调度器
  • Zookeeper
  • Kafka
  • Flume
  • 学习周刊
关于
  • 分类
  • 标签
  • 归档
开往 (opens new window)
  • Shell编程

    • 如何让不断增加的目录只保留五个文件
    • 那些使用字符画出来的画
    • 业务中期的日志备份操作过程
    • 关于sed命令当中包含变量的坑
    • markdown
    • 利用shell脚本将博客数据库备份到邮箱附件
    • Shell实现两组数据的交并差sort-uniq
      • 1. sort、uniq
      • 2. 性能优化
      • 3. 优点分析
    • Shell将文件平均切分为n份
    • linux的压缩与解压(zip、gz、tar.gz)
  • Java编程笔记

  • Spark

  • Hadoop

  • ClickHouse

  • MySQL

  • PostgreSQL

  • MongoDB

  • 调度器

  • Zookeeper

  • Kafka

  • Flume

  • 编程世界
  • Shell编程
花开不停
2024-11-08
目录

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. 性能优化

  • 再使用的过程中,如果文件数据量特别大,发现计算时间比较长。可以做如下优化,经测试速度大致提升4-5倍左右。但是该参数必须在脚本使用。
# 有文件 a.txt
LC_ALL=C sort -T ./ -S 5% a.txt |LC_ALL=C  uniq > a_uniq.txt
1
2

# 3. 优点分析

sort、uniq利用磁盘进行计算,可支持运算数据量非常大,取决于磁盘大小。对于CPU和内存的要求比较低。同时加上优化参数,性能很高。比SQL计算耗时低,速度快,支持数据量大。

缺点是:所有数据需要下载到磁盘,需要写Shell脚本。

← 利用shell脚本将博客数据库备份到邮箱附件 Shell将文件平均切分为n份→

最近更新
01
2025-05-26当我意识到我变得自私、暴躁、情绪不受控制 原创
05-26
02
clickhouse版本升级的语法变动21.8.9.1至23.8.9.1 原创
04-22
03
2025-03-28拍婚纱照 原创
04-02
更多文章>
Theme by Vdoing | Copyright © 2023-2025 | 京ICP备2023013437号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式