![比较两个文件并显示内容](https://linux22.com/image/149500/%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E5%B9%B6%E6%98%BE%E7%A4%BA%E5%86%85%E5%AE%B9.png)
我有两个包含如下内容的文件:
File 1
OG5_126568
OG5_126583
OG5_126593
OG5_126596
OG5_126599
OG5_126609
File2
OG5_126568 psychrobacter_aquaticus.txt WP_021813339.1
OG5_126583 psychrobacter_aquaticus.txt WP_040642027.1
OG5_126583 psychrobacter_phenylpyruvicus.txt WP_028858051.1
OG5_126585 psychrobacter_piscatorii.txt WP_058023688.1
OG5_126593 psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593 psychrobacter_aquaticus.txt WP_021814787.1
OG5_126593 psychrobacter_piscatorii.txt WP_021814787.1
OG5_126593 psychrobacter_phenylpyruvicus.txt WP_021814787.1
我想将第一个文件与第二个文件进行比较,并生成一个仅包含匹配内容的新文件。
生成的文件
OG5_126593 psychrobacter_aquaticus.txt WP_021813641.1
OG5_126593 psychrobacter_aquaticus.txt WP_021814787.1
OG5_126593 psychrobacter_piscatorii.txt WP_021814787.1
OG5_126593 psychrobacter_phenylpyruvicus.txt WP_021814787.1
我应该使用哪个命令?
答案1
这个问题与已经有答案的问题非常相似https://stackoverflow.com/questions/13272717/inner-join-on-two-text-files
最简单的方法(适用于您的示例文件内容)是使用
join file1 file2
这假设输入文件已排序。
答案2
这与解决方案等效join
,但不需要对输入文件进行排序。
awk 'NR==FNR {f1[$1]; next} $1 in f1' file{1,2}
答案3
如果您想使用 File1 中的行作为模式并打印与其中之一“匹配”的所有行,您可以使用grep
:
grep -f File1 File2