0

这是一个相当重复的问题,但我无法用我的文件弄清楚,因此,任何帮助将不胜感激。

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

文件 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

非常感谢您

4

2 回答 2

1

有的这样?

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
于 2013-11-04T17:28:25.863 回答
0

在这个例子中,grep就足够了:

grep -w -f file1 file2
于 2013-11-04T17:34:31.727 回答