我有两个文件,我想显示重复的行。我尝试了这个,但它不起作用:
cat id1.txt | while read id; do grep "$id" id2.txt; done
我想知道是否有其他方法可以在文件中显示重复的行。 我的两个文件都包含id列表。 谢谢。
答案 0 :(得分:13)
文件是否排序?它们可以分类吗?
如果已排序:
comm -12 id1.txt id2.txt
如果没有排序但使用bash
4.x:
comm -12 <(sort id1.txt) <(sort id2.txt)
如果您没有bash
4.x和'process substitution',则有使用临时文件的解决方案。
您也可以使用grep -F
:
grep -F -f id1.txt id2.txt
这会查找id1.txt
中显示的id2.txt
中的字词。这里唯一的问题是确保ID 1
与某个地方包含1
的每个ID都不匹配。某些版本的grep
中提供的-w
或-x
选项可在此处使用。
答案 1 :(得分:10)
如果检测到重复是指两个文件中存在的打印行(或在一个文件中重复),则可以使用uniq
:
$ cat file1 file2 | sort | uniq -d
答案 2 :(得分:2)
您可以改为使用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
参数,则会抑制公共线。答案 3 :(得分:0)
使用 awk 可以节省您的时间。
awk 'FNR==NR{lines[$0]=1;next} $0 in lines' id1.txt id2.txt