【发布时间】:2019-03-04 22:19:53
【问题描述】:
我正在尝试使用“awk”根据分隔符(# 和--)提取文本块(仅限第一个字段/列,但多行,行数因块而异)。这些列代表序列 ID。
使用“awk”我可以分隔块并打印第一列,但我无法将这些文本块重定向到单独的输出文件。
代码:
awk '/#/,/--/{print $1}' OTU_test.txt
理想情况下,我想根据在每个块的第一行中找到的一些文本(例如 MEMB.nem.6;MEMB.nem. 是内容,但数字会改变)保存每个文件(不包括分隔符的文本块) )
输入文件示例 enter image description here
#OTU_MEMB.nem.6
EF494252.1.2070 6750.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Nucletmycea;D_3__Fungi;D_7__Dothideomycetes;D_8__Capnodiales;D_9__uncultured fungus 1.000
FJ235519.1.1436 5957.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Nucletmycea;D_3__Fungi;D_7__Dothideomycetes;D_8__Capnodiales;D_9__uncultured fungus 1.000
New.ReferenceOTU9219 5418.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Nucletmycea;D_3__Fungi 1.000
GQ120120.1.1635 471.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Nucletmycea;D_3__Fungi;D_7__Dothideomycetes;D_8__Capnodiales;D_9__uncultured fungus 0.990
--
#OTU_MEMB.nem.163
New.CleanUp.ReferenceOTU59580 12355.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Holozoa;D_3__Metazoa (Animalia);D_7__Chromadorea;D_8__Monhysterida 0.700
New.ReferenceOTU11809 1312.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Holozoa;D_3__Metazoa (Animalia);D_7__Chromadorea;D_8__Monhysterida 0.770
--
#OTU_MEMB.nem.35
New.CleanUp.ReferenceOTU120578 12116.0 D_0__Eukaryota;D_1__Opisthokonta;D_2__Holozoa;D_3__Metazoa (Animalia);D_7__Chromadorea;D_8__Desmoscolecida;D_9__Desmoscolex sp. DeCoSp2 0.780
预期的输出文件(仅第一列,无分隔符)。
MEMB.nem.6.txt
EF494252.1.2070
FJ235519.1.1436
New.ReferenceOTU9219
GQ120120.1.1635
MEMB.nem.163.txt
New.CleanUp.ReferenceOTU59580
New.ReferenceOTU11809
MEMB.nem.35.txt
New.CleanUp.ReferenceOTU120578
我搜索了很多,但到目前为止我没有成功。如果有人可以建议我,我会很高兴。
谢谢,
蒂亚戈
【问题讨论】:
-
您遇到了永远不应使用范围表达式的原因之一 (
/start/,/end) - 最小的需求更改需要完全重写或复制条件。始终使用标志 (/start/{f=1} f; /end/{f=0})。