1

我有两个文件,例如:

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

4

2 回答 2

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 中获取模式,每行一个。如果此选项被多次使用或与 -e (--regexp) 选项结合使用,则搜索所有给定的模式。空文件包含零个模式,因此不匹配任何内容。

于 2013-06-10T16:02:55.523 回答
4

使用 awk:

awk 'NR==FNR{a[$1]++;next}$1 in a' test.1 test.2

注意数组中出现在第一个文件中的行,然后在第二个文件中打印第一个文件中的行。行将按照它们在第二个文件中出现的顺序出现在输出中。

或加入:

join <(sort test.1) <(sort test.2)

文件需要排序。行将按字典顺序出现。

于 2013-06-10T16:05:04.210 回答