查找两个文件之间的模式

查找两个文件之间的模式

File1包含基因列表(用字母表示)。每个基因都由它表达的蛋白质来描述(用字母表示):

a-1
b-2
c-3

File2还包含基因列表,但每个基因都重复多次。其中一些基因与以下基因相似File1

a
a
a
b
b
c
c
c

我需要找到File1中共有的所有基因File2。常见的需要打印到第三个文件中(多份也是如此)。除此之外,基因表达的蛋白质类型也需要一起写入(就像在 中一样File1)。

我怎样才能获得以下内容File3

a-1
a-1
a-1
b-2
b-2
c-3
c-3
c-3

答案1

这是使用 gawk 执行此操作的简单方法,它有一个内置变量,即正在处理的当前文件的ARGIND索引。ARGV

我们拆分第一个文件的每个输入行,并使用第一个字段索引到存储整行的-数组中。table对于第二个文件(以及任何后续文件),我们使用整行作为索引来table检索所需的行。

BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}

或者作为一句单行:

awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2

这是另一个适用于传统 awk 的版本。它通过比较FNR当前输入文件中的输入记录数 和NR迄今为止看到的输入记录总数来确定当前文件是否是第一个文件。

awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2

相关内容