Подумайте об упрощении с помощью расширения GNU find-path
:
find. -type f -path "*/ExampleDir/*"
Сperl
:
perl -ne 'push @l, ">". join("", /\[(.*?)\]/g). "\n". <>;
END{print for sort @l}' your-file
Сsed
:
<your-file sed 's/^[^[]*\[/>/
s/\][^[]*\[\{0,1\}//g
N;s/\n/\[/' |
sort |
tr '[' '\n'
Мое (запутанное )предложение:
cat file | grep -Po "^[CGTA-]*$|^>.*$" | grep -Po "(?<=\[).*(?=])|^[ACGT-]*$" | awk '{printf (NR%2==0) ? $0 "\n" : ">"$0"::"}' | sort | sed 's/#/\n/'
Grep только строки, содержащие символы CGTA-
и строки, начинающиеся с>
grep -Po "^[CGTA-]*$|^>.*$"
Grep только то, что находится внутри скобок, исключая их и строки, соответствующие шаблонуACGT-
| grep -Po "(?<=\[).*(?=])|^[ACGT-]*$"
Соедините каждые две строки, добавив разделитель #
и начальную >
, затем отсортируйте
| awk '{printf (NR%2==0) ? $0 "\n" : ">"$0"#"}' | sort
Наконец, замените разделитель #
новой строкой
| sed 's/#/\n/'
Выход:
>Archaeoglobus_fulgidus_DSM_4304.gbfspecies
ATGCGCGCGATAGCTAGCTAGCTAGCTTTAGGGGGATTAGCTA----ACTCTGATTCGGA
>Ignicoccus_hospitalis_KIN4-I.gbfspecies
ATGAGTGTGACTA---TTT---GCAATCAGCTAGCTACTACGTACTGATCGTAGCTGACG