我有两个文件,我想显示重复的行。 我试过,但它不工作:
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
参数,它会抑制公共线。