在两个不同的文件中显示重复的行

我有两个文件,我想显示重复的行。 我试过,但它不工作:

cat id1.txt | while read id; do grep "$id" id2.txt; done

我想知道是否有任何其他方式来显示文件中的重复行。 我的两个文件都包含ID列表。 谢谢。

文件是否被排序? 他们可以排序吗?

如果排序:

 comm -12 id1.txt id2.txt 

如果没有排序,但使用bash 4.x:

 comm -12 <(sort id1.txt) <(sort id2.txt) 

如果您没有bash 4.x和“进程替换”,则有使用临时文件的解决方案。

你也可以使用grep -F

 grep -F -f id1.txt id2.txt 

这会查找id1.txt中出现在id2.txt中的id2.txt 。 唯一的问题是确保ID 1不匹配每个包含1 ID。 在某些版本的grep可用的-w-x选项将在此处起作用。

如果通过检测重复的内容,你是指在两个文件中都存在的打印行(或者在一个文件中重复),你可以使用uniq

 $ cat file1 file2 | sort | uniq -d 

你可以使用comm命令来代替:

 sort id1.txt > id1.txt.sorted sort id2.txt > id2.txt.sorted comm -12 id1.txt.sorted id2.txt.sorted 

如果你想用一个命令来做:

 comm -12 <(sort id1.txt) <(sort id2.txt) 

comm参数:

  • -1参数禁止在第一个文件中唯一的行。
  • -2参数禁止在第二个文件中唯一的行。
  • 如果你传递一个-3参数,它会抑制公共线。