linux 如何过滤出两个文本相同的内容
在 Linux 中,如果你有两个文本文件,想要找到它们相同的部分,可以使用以下方法:
🎯 方法一:comm 命令
comm 是专门比较两个已排序文件的工具,能找出相同和不同的行。
使用步骤:
1️⃣ 先对两个文件排序:
sort file1.txt -o file1_sorted.txt
sort file2.txt -o file2_sorted.txt
2️⃣ 使用 comm 找出相同部分(第3列表示相同内容):
comm -12 file1_sorted.txt file2_sorted.txt
💡 -1 表示不显示只在 file1 中的行,-2 表示不显示只在 file2 中的行,-12 组合表示只显示相同的行。
🎯 方法二:grep + F (适合不需要排序的场景)
如果你的文件比较小,或者不需要排序,可以用 grep:
grep -Fxf file1.txt file2.txt
解释:
-F :固定字符串匹配(不当作正则表达式处理)
-x :整行匹配
-f file1.txt :使用 file1.txt 的每一行作为模式
file2.txt :在这个文件中查找匹配
🎯 方法三:awk 实现(更强大)
如果需要处理更复杂的场景,可以用 awk:
awk ‘NR==FNR{a[$0];next} $0 in a’ file1.txt file2.txt
这段代码表示把 file1.txt 的每一行存入 a 数组中,然后在 file2.txt 中匹配相同的行。
🎯 总结
方法 优势 适用场景
comm 简单、直观 文件已排序,内容较大时使用
grep 快速、无需排序 小文件或临时检查时使用
awk 强大、灵活 需要处理更复杂的匹配条件时(如字段匹配等)