当前位置: 首页 > news >正文

Shell Daily 2026-04-19: 原序去重 (Awk Unique)

Shell Daily 2026-04-19: 原序去重 (Awk Unique)

排查业务日志时,你可能提取出了一长串报错的 IP 列表。为了去除重复项,肌肉记忆通常会驱使你敲下这行经典组合:sort error_ips.txt | uniq

对于纯粹的集合统计,这招很好用。但如果你处理的是一份有严格时间先后顺序的流式日志,或者一份带有第一行表头的 CSV 文件,sort 会毫不留情地把原有的时间线彻底打乱,甚至把表头排序到数据中间去。在很多场景下,我们真正需要的操作是:“去除重复项,但绝对保留数据最初始的先后顺序”。

怎么用

利用 awk 的关联数组(字典)特性,只需一行极简代码就能实现原序去重,完全不需要借助 sort

  • 核心语法awk '!a[$0]++' filename
  • 原理解释a 相当于一个字典,$0 代表当前整行内容。每次读取新的一行,就在字典中查它,并让它的计数器 +1。如果它是第一次出现(原来的值为 0),加上 ! 取反后为真(True),awk 就会触发默认动作:将该行打印出来。如果是重复项,取反后为假,静默跳过。
  • 性能优势:由于不需要像 sort 那样在内存或磁盘中对全量数据进行比对排序,它的时间复杂度只有 O(N)。处理几十 GB 的大文件时,速度快得惊人。
  • 兼容性POSIX 通用。无论是 Linux 的 GNU Awk 还是 macOS/BSD 自带的原生 Awk,都能完美支持。

适用场景

  • 时序日志溯源:找出一个时间段内,每个被封禁的恶意 IP 首次发起攻击的原始日志行。
  • 配置文件合并:将多个 hosts 文件或配置项合并时,只保留排在前面的高优先级定义,忽略后面的重复项。
  • 无损 CSV 清洗:在不破坏原始入库顺序、不扰乱第一行表头的前提下,去除完全重复的数据行。

示例 1:纯粹的原序去重

假设你有一个按时间生成的部署记录 deploy_history.log,你只想知道依次部署过哪些服务,保留它们首次出现的先后顺序。

# 笨办法:打乱了时间顺序,你不再知道谁先谁后
$ sort deploy_history.log | uniq# 稳妥做法:完美保留原始时间线,见一个记一个
$ awk '!seen[$0]++' deploy_history.log

示例 2:按指定列去重

这是 sort | uniq 极难优雅实现的进阶操作。假设日志中有时间戳和用户 ID,你只想根据“用户 ID”(第二列)来去重,提取每个用户当天的第一条活动记录。

# 假设 access.log 格式为:[时间] [UserID] [操作]
# 将 $0 换成 $2,即可仅依据第二列的值进行判重,但依然打印完整记录
$ awk '!seen[$2]++' access.log > first_actions.log

(注:掌握这个 Awk 范式,不仅解决了顺序丢失的痛点,还会让你在处理超大文本时彻底告别 sort 带来的内存焦虑。)

http://www.jsqmd.com/news/655505/

相关文章:

  • 单机变多人:UniversalSplitScreen如何让一台电脑成为游戏派对中心
  • 从Demo到实战:手把手教你整合Cartographer的Launch与Lua文件,打造专属Gazebo建图配置
  • 颠覆传统:一键解锁国家中小学智慧教育平台的离线学习革命
  • 基于TR-FRET技术的GSPT1降解剂在神经母细胞瘤中的研究
  • 从医疗影像到自动驾驶:DeepLabv3+在不同行业的实战调参指南与踩坑记录
  • 可靠的钢质防火门厂家分享,了解尺寸与质量,推荐哪家 - 工业品牌热点
  • 地府管理系统完整版:开源冥界模拟平台开发指南
  • 从水下通信到医学超声:群速度与相速度在实际工程中的关键作用与避坑指南
  • 平行泊车路径规划:从理论可行区域到实际轨迹生成
  • 3分钟快速激活Windows和Office:智能KMS激活工具完全指南
  • 告别“已撤回“的遗憾:Windows微信QQ防撤回工具完全指南
  • arkts中开启布局定位
  • 从“吃瓜博弈”到最优策略:解析Alice与Bob的极限资源竞争模型
  • 别再乱用casex了!从Formality等价性检查失败,谈Verilog X态编码风格避坑
  • 提供物业纠纷法律咨询的律所怎么收费 - myqiye
  • TI毫米波雷达xWR1642开箱第一步:手把手教你用UniFlash烧录官方demo固件
  • 从AlexNet的‘古董’GPU并行到现代PyTorch单卡实现:一段代码的进化史
  • 2026年必备:8款AI降重工具 高效快速解决论文降重效率低难题 - 降AI实验室
  • 探寻信誉好的团餐配送专业公司,有实力的品牌企业怎么收费 - mypinpai
  • 华为WLAN安全认证实战:MAC地址认证与RADIUS服务器深度集成
  • 缠论可视化分析插件:通达信技术分析终极指南
  • 终极指南:如何用TotalSegmentator快速完成医学影像自动分割
  • 牛客网热门Java 面试题汇总,查漏补缺;多线程 +spring+JVM 调优 + 分布式 +redis+ 算法
  • 保姆级教程:用OpenCV玩转双目视觉,从SAD到SGBM算法实战(附避坑指南)
  • 论文排版 “渡劫”?Paperxie 一键把格式焦虑焊死在毕业季
  • 手把手教你解决CarSim/Simulink联合仿真时预瞄点变量找不到的坑
  • 有实力的团体餐配送机构剖析,诚信的团体餐配送企业费用多少 - 工业设备
  • 深聊靠谱的团体餐配送公司怎么选,信誉好的机构推荐哪家 - 工业品网
  • Linux离线环境实战:PostgreSQL与PostGIS一站式部署指南
  • 终极指南:3分钟彻底告别Windows音量弹窗干扰