我有两个文件,例如:
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 组合,但它不起作用。
您可以使用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) 选项结合使用,则搜索所有给定的模式。空文件包含零个模式,因此不匹配任何内容。
使用 awk:
awk 'NR==FNR{a[$1]++;next}$1 in a' test.1 test.2
注意数组中出现在第一个文件中的行,然后在第二个文件中打印第一个文件中的行。行将按照它们在第二个文件中出现的顺序出现在输出中。
或加入:
join <(sort test.1) <(sort test.2)
文件需要排序。行将按字典顺序出现。