请你快点帮帮我吗?我有两个文件,每个文件有1列。我需要将fileA与fileB进行比较,找出FileA中哪些项目已经存在于FILEB中并将它们打印到另一个文件中。所以基本上想找出它们共有的名称。
所以我有类似的东西
FILEA
MATT.1
HANNA.1
OTTOO.2
MARK.2
SAM.3
FILEB
SAM.3
MATT.1
JEFF.6
ALI.8
结果文件应为
SAM.3
MATT.1
我正在考虑编写一个shell脚本cat一个文件并逐行比较,但必须有一个更好更简单的方法来使用众多命令之一。你能帮忙吗?
此致
答案 0 :(得分:3)
这是comm
的工作。输入文件需要排序
comm -12 <(sort file1) <(sort file2)
会给你共同的界限。
awk回答:
awk 'NR==FNR {f[$0]=1; next} $0 in f' fileb filea
将较小的文件作为第一个参数来限制所需的内存量。
答案 1 :(得分:2)
这看起来返回filea中与fileb中任何一行匹配的行:
$ grep -Ff fileb filea
MATT.1
SAM.3
-F
告诉grep寻找固定模式,而不是正则表达式。
-f
告诉grep从文件中获取模式列表,在本例中为fileb
。
我们可以通过以下选项使匹配更具限制性:
-w
会告诉grep只匹配整个单词。
-x
会告诉grep只匹配整行。