如何用Linux Shell高效获取多个TXT文件内容的交集?
多个文本文件内容交集的高效实现方法
你可以用一次合并、排序、统计再加筛选的方式,比逐步合并生成临时文件的方法更高效,不需要中间临时文件,命令如下:
cat 1.txt 2.txt 3.txt 4.txt | sort | uniq -c | awk -v n=4 '$1 == n {print $2}'
命令说明
cat 1.txt 2.txt 3.txt 4.txt:将所有目标文件的内容合并输出sort:对所有行排序,让相同内容的行聚集在一起uniq -c:统计每一行的出现次数,输出格式为「次数 内容」awk -v n=4 '$1 == n {print $2}':定义变量n为文件总数(这里是4),筛选出出现次数等于文件总数的行,只输出内容部分
如果你的文件是按规律命名(比如都是数字后缀的txt),可以用*.txt替代具体文件名列表,简化命令:
cat *.txt | sort | uniq -c | awk -v n=4 '$1 == n {print $2}'
示例验证
用你提供的输入文件运行上述命令,会输出1,和预期结果一致。
这个方法相比你原来的逐步合并方式,减少了多次排序和临时文件的生成,处理大文件时效率提升更明显。
内容的提问来源于stack exchange,提问作者seqwait
相关产品推荐
相关产品推荐

