找到两个文件之间的相似之处

时间:2013-06-10 16:01:51

标签: bash awk

我有两个文件:

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组合,但它不起作用。

2 个答案:

答案 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)

需要对文件进行排序。行将按字典顺序显示。