我正在尝试使用"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
我已经搜索了很多,但到目前为止还没有成功。如果有人能给我建议,我会很高兴的。
谢谢,
提亚戈
发布于 2018-09-29 21:16:38
awk '
sub(/^#OTU_/,"") {
close(out)
out = $0 ".txt"
next
}
!/^--/ {
print $1 > out
}
' file
https://stackoverflow.com/questions/52563448
复制相似问题