如何按参考文件顺序匹配目标文件并输出匹配行及其后一行
序列提取操作实现方案
核心思路
先遍历目标文件(target),将所有序列ID和对应的序列内容关联存储到哈希结构中,再遍历参考文件(ref),按参考文件的ID顺序读取并输出对应的ID和序列,即可严格保证顺序符合要求。
具体实现
直接使用awk单命令即可完成需求:
awk 'FNR==NR{ if($0~/^[NX]P_/){ id=$0 a[id]=$0 getline b[id]=$0 } next } { print a[$1] print b[$1] }' target ref
命令说明
- 第一阶段处理第一个输入文件
target:- 匹配以
NP_或XP_开头的行,判定为序列ID行 - 暂存当前ID,将ID行内容存入哈希
a - 调用
getline读取下一行的序列内容,存入哈希b,键与a保持一致为当前ID
- 匹配以
- 第二阶段处理第二个输入文件
ref:- 按ref的行顺序逐个读取ID,依次输出哈希
a中存储的ID行、哈希b中存储的对应序列行
- 按ref的行顺序逐个读取ID,依次输出哈希
如果需要匹配你给出的输出示例中每行前置4个空格的格式,修改print部分即可:
awk 'FNR==NR{ if($0~/^[NX]P_/){ id=$0 a[id]=$0 getline b[id]=$0 } next } { print " "a[$1] print " "b[$1] }' target ref
内容的提问来源于stack exchange,提问作者user5719890
相关产品推荐
相关产品推荐

