作为三剑客之一的awk
的功能不用多介绍了,文本处理能力不输Perl
,尤其是在命令行快速使用。(当然Perl的单行命令也是很强的)
需求
我有一个表格1(转录因子数据库文件)table1.xls
:
image.png
还有一个表格2(典型的
blast m8
格式输出结果,第一列是geneID,第二列是转录因子数据库ID)table2.xls
:image.png
我想要得到这样一个表格table3.xls
:
image.png
题外话:有朋友要问了,为什么比对结果文件的subject
有两个Ensembl ID
呢?这是因为转录因子数据库的ID
本来就有两个呀,所以比对到也就两个咯。咳咳,好像没答到点子上,因为我也不知道,大概是Isoform
咯。
image.png
处理
awk -F' ' '{print $2" "$(NF-1)" "$NF}' table1.xls | \\
awk -F' ' 'NR==FNR{a[$1]=$0;next}{split($2,array,/:/);if (array[1] in a) print $1" "a[array[1]];else if(array[2] in a)print $1" "a[array[2]]}' - table2.xls >table3.xls