Awk 使用不同行号匹配两个文件中的列

Awk 使用不同行号匹配两个文件中的列,awk,Awk,这是一个相当重复的问题,但我无法用我的文件解决它,因此,任何帮助都将不胜感激 我有两个文件,我想比较它们的第一个字段,并将公共行打印到第三个文件中,这是我的文件的一个示例: 文件1: gene1 gene2 gene3 文件2: gene1|trans1|12|233|345 45 gene1|trans2|12|342|232 45 gene2|trans2|12|344|343 12 gene2|trans2|12|344|343 45 gene2|trans2|12|344|343 12

这是一个相当重复的问题,但我无法用我的文件解决它,因此,任何帮助都将不胜感激

我有两个文件,我想比较它们的第一个字段,并将公共行打印到第三个文件中,这是我的文件的一个示例:

文件1:

gene1
gene2
gene3
文件2:

gene1|trans1|12|233|345 45
gene1|trans2|12|342|232 45
gene2|trans2|12|344|343 12
gene2|trans2|12|344|343 45
gene2|trans2|12|344|343 12 
gene2|trans3|12|34r|343 325 
gene2|trans2|12|344|343 545
gene3|trans4|12|344|333 454
gene3|trans2|12|343|343 545 
gene3|trans3|12|344|343 45
gene4|trans2|12|344|343 2112
gene4|trans2|12|344|343 455
文件2包含更多字段。请注意,第一个字段与第一个文件不完全相同,但基因元素仅匹配

输出应如下所示:

gene1|trans1|12|233|345 45
gene1|trans2|12|342|232 45
gene2|trans2|12|344|343 12
gene2|trans2|12|344|343 45
gene2|trans2|12|344|343 12 
gene2|trans3|12|34r|343 325 
gene2|trans2|12|344|343 545
gene3|trans4|12|344|333 454
gene3|trans2|12|343|343 545 
gene3|trans3|12|344|343 45
我使用此代码,它不会给我任何错误,但也不会给我任何输出:

awk '{if (f[$1] != FILENAME) a[$1]++; f[$1] = FILENAME; } END{ for (i in a) if (a[i] > 1) print i; }' file1 file1
非常感谢

像这样的人

awk -F\| 'FNR==NR {a[$0]++;next} $1 in a' file1 file2
gene1|trans1|12|233|345 45
gene1|trans2|12|342|232 45
gene2|trans2|12|344|343 12
gene2|trans2|12|344|343 45
gene2|trans2|12|344|343 12
gene2|trans3|12|34r|343 325
gene2|trans2|12|344|343 545
gene3|trans4|12|344|333 454
gene3|trans2|12|343|343 545
gene3|trans3|12|344|343 45

在本例中,
grep
就足够了:

grep -w -f file1 file2