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