извлечение текстовых блоков из входного файла с помощью awk или sed и сохранение каждого блока в отдельном выходном файле - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь использовать «awk» для извлечения текстовых блоков (только первое поле / столбец, но несколько строк, количество строк варьируется между блоками) на основе разделителей (# и -. Эти столбцы представляют идентификаторы последовательности.

Используя «awk», я могу разделить блоки и напечатать первый столбец, но не могу перенаправить эти текстовые блоки в отдельные выходные файлы.

Код:

awk '/#/,/--/{print $1}' OTU_test.txt

В идеале я хотел бы сохранить каждый файл (текстовый блок, исключая разделители) на основе некоторого текста, найденного в первой строке каждого блока (например, MEMB.nem.6; MEMB.nem. Является содержимым, но число изменяется)

Пример входного файла введите описание изображения здесь

#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

Я много искал, но пока не увенчался успехом. Я был быочень рад, если кто-то может посоветовать мне.

Спасибо,

Tiago

1 Ответ

0 голосов
/ 29 сентября 2018
awk '
sub(/^#OTU_/,"") {
    close(out)
    out = $0 ".txt"
    next
}
!/^--/ {
    print $1 > out
}
' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...