我有两个文件:
1
2
3
4
5
6
7
8
9
10
和一个包含两列的文件
1 0.11
2 0.12748
5 0.45
12 0.48
7 0.48
8 0.7
13 0.78
14 0.88
我想找到两个文件之间的相似之处。如果在两个文件中,文件1中的数字也在文件2的第一列中,则表示它必须出现在输出文件中。输出应为:
1 0.11
2 0.12748
5 0.45
7 0.48
8 0.7
我尝试使用不同的grep组合,但它不起作用。
答案 0 :(得分:5)
您可以使用grep -f patt_file file
从文件中获取模式。也就是说,搜索file
中包含的patt_file
模式。
使用您给定的输入查看输出:
$ grep -w -f file1 file2
1 0.11
2 0.12748
5 0.45
7 0.48
8 0.7
来自man grep
:
-f FILE, - file = FILE
从FILE获取模式,每行一个。如果多次使用此选项或与-e(--regexp)选项组合使用,请搜索给定的所有模式。空文件包含零模式,因此不匹配任何内容。
答案 1 :(得分:4)
使用awk:
awk 'NR==FNR{a[$1]++;next}$1 in a' test.1 test.2
在数组中注意出现在第一个文件中的行,然后在第二个文件中打印第一个行中的行。行将按照它们在第二个文件中出现的顺序出现在输出中。
或加入:
join <(sort test.1) <(sort test.2)
需要对文件进行排序。行将按字典顺序显示。