网站首页 > 技术文章 正文
如何获取两个文件中的共有行(集合的交集)或只在其中一个文件中的行(集合的差集)?
使用 comm(1) 命令是一种获取两个文件中共有行或只在一个文件中的行的方法:
请阅读 comm? 命令的手册以了解更多详细信息。上述命令中使用了进程替代(process substitution)。
如果由于某种原因你没有 comm? 程序,或者正在寻找替代方法,你可以使用以下其他方法。方法一使用 grep?,方法四使用 awk?。这两种方法比上述的 comm + sort? 更快,但是其中一个数据文件将被加载到内存中,因此在处理非常大的文件时不太适用。
- 使用 grep?? 的实现是一种简单且快速的方法,适用于将一个包含 30,000 行的文件与一个包含 400,000 行的文件进行匹配,仅需 20 秒。
- 该方法让 grep?? 从文件中读取一个模式列表(使用 -f??),将这些模式视为纯字符串而不是正则表达式(使用 -F??),并仅匹配整行(使用 -x??)。
- 注意,使用 -f?? 指定的文件将被加载到内存中,因此对于非常大的文件,这种方法不适用。
- 它应该适用于任何 POSIX 兼容的 grep??;在旧的系统上,你可能需要使用 fgrep?? 而不是 grep -F??。
- 使用 sort?? 和 uniq?? 的实现:
- 另一种差集的实现:
- 这种方法可能会在行的开头引入额外的空格,如果这是个问题,你可以将其去除。
- 此方法还假设 file1 和 file2 都不包含任何重复项。
- 最后,它会对输出进行排序。如果这是个问题,那么你将不得不完全放弃这种方法。也许你可以使用 awk?? 的关联数组(或者 perl?? 的哈希表或 tcl?? 的数组)来替代。
- 使用 awk?? 实现差集和交集,无论输入文件是否已排序或包含重复项:
更多
如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。
猜你喜欢
- 2024-10-16 python数据类型(python数据类型bool)
- 2024-10-16 JavaScript Set、Map、WeakSet 和 WeakMap 的区别?
- 2024-10-16 69-1-10000遗漏了哪些序号#差集#Filter...
- 2024-10-16 进入Python的世界12-常用的程序例子整理二
- 2024-10-16 Java路径-35-Java的HashSet(java路径怎么找)
- 2024-10-16 Redis五种数据类型详解(redis7种数据类型)
- 2024-10-16 那些你不得不知的Redis基础类型常用操作、命令
- 2024-10-16 美团外卖iOS App冷启动治理(美团早启动)
- 2024-10-16 (Python)通过口诀记忆数组、集合、字典、元组
- 2024-10-16 【C++泛型编程】(二)标准模板库 STL
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)