根据部分 ID 提取文本

根据部分 ID 提取文本

我有一个 fastq 文件。文件中的每个条目都有以下四行

@0e249669-03e7-47e0-9bc2-a9bcaa35e198 runid=435beb2485d20d8e06f3b38ed907a08f8147fa77 read=100 ch=83 start_time=2018-10-27T12:20:46Z
ACGTATGCCCCGTTCAGTTGCACGTATTGCTATTAGTCACCATTACTTCTTCCTATTTGATGTGAAACCAAGGCAGAGATACTTTTCTGGGTGGTATTTGGGAGGTGGTGAGGCGATTCAAATCCAGGTCTCTCTGGGGACCTTGTTCTTAACCCCTGTACCCCCAGCCATCTGATATAATACTTTT
+
%)"+"""&(,,(,42(--/#)&()1,//./2,7,++8735/-+*#%*3-06,*($(&""#&$)(%.,,2/,#("#$##$')#$-13/*)(-/+(.-*'.+*0)&)&&

行中没有任何空行。

这只是一个条目,因此文本文件中有数千个条目。

我有另一个文件如下

@0e249669-03e7-47e0-9bc2-a9bcaa35e198
@e5cbeff3-5c28-46e4-a991-3dfded8505de

如何使用这些唯一 ID 的列表提取每条记录的所有四行?

输出应遵循

@0e249669-03e7-47e0-9bc2-a9bcaa35e198 runid=435beb2485d20d8e06f3b38ed907a08f8147fa77 read=100 ch=83 start_time=2018-10-27T12:20:46Z
ACGTATGCCCCGTTCAGTTGCACGTATTGCTATTAGTCACCATTACTTCTTCCTATTTGATGTGAAACCAAGGCAGAGATACTTTTCTGGGTGGTATTTGGGAGGTGGTGAGGCGATTCAAATCCAGGTCTCTCTGGGGACCTTGTTCTTAACCCCTGTACCCCCAGCCATCTGATATAATACTTTT
+
%)"+"""&(,,(,42(--/#)&()1,//./2,7,++8735/-+*#%3-06,($(&""#&$)(%.,,2/,#("#$##$')#$-13/)(-/+(.-'.+*0)&)&&

答案1

我认为以下命令行可以完成这项工作。数据在文件中fast-file,数据组名称在文件“list”中。

while read line;do name=${line%% *}; grep -A3 "$name" fast-file ;done < list

或者如果你想删除</br>token,

while read line;do name=${line%% *}; grep -A3 "$name" fast-file ;done < list | sed 's%</br>%%'

相关内容