команда grep для поиска списка генов в первом файле, присутствующем в файле gff

Как вам это решение?:

sed -i -E -e "s/(Original|Reversal).*</\1$(sed '1q;d' file.txt)</" -e 's/C[0-9]*//' file.xml

text="$(cat foo)" && echo "$text" \
| sed -E -e "s/(Original|Reversal).*</\1$(sed '2q;d' file.txt)</" -e 's/C[0-9]*//' >> file.xml

Найдите шаблон Origina|Reversalдо <

.
sed -i -E -e "s/(Original|Reversal).*</

Заменить первой строкойfile.txt

    /\1$(sed '1q;d' file.txt)</" -e 's/C[0-9]*//' file.xml

Скопируйте содержимое файла xml и повторите операцию, на этот раз со второй строкой file.txtи добавьте вывод в файл xml

text="$(cat foo)" && echo "$text" \
| sed -E -e "s/(Original|Reversal).*</\1$(sed '2q;d' file.txt)</" -e 's/C[0-9]*//' >> file.xml
-2
04.10.2021, 09:10
1 ответ

Пропустить флаг -wдо grep, так как это ограничивает поиск соответствием на границах слов , как определеноgrep(из документов, «Выбирать только те строки, содержащие совпадения, которые образуют целое слова».). Эта команда выдает ожидаемый результат:

cat > GCA_900659725.1_ASM90065972v1_genomic.gff <<EOF
CAACVG010000001.1 EMBL region 1 15202. +. ID=CAACVG010000001.1:1..15202;Dbxref=taxon:64391;gbkey=Src;mol_type=genomic DNA;note=contig: 10000|quiver
CAACVG010000001.1 EMBL gene 4526 9821. -. ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1
EOF

cat > upregulated_genes_in_BEg <<EOF
LOCUS1
LOCUS10095
EOF

grep -f upregulated_genes_in_BEg GCA_900659725.1_ASM90065972v1_genomic.gff

Печать:

CAACVG010000001.1 EMBL gene 4526 9821. -. ID=gene-CALMAC_LOCUS1;Name=CALMAC_LOCUS1;gbkey=Gene;gene_biotype=protein_coding;locus_tag=CALMAC_LOCUS1

Если вам нужен точный контроль над границами слов, возможно, этот лайнер Perl one -будет лучшим выбором:

perl -lne 'BEGIN { @upregulated_genes_in_BEg = `cat upregulated_genes_in_BEg`; %is_upregulated_gene_in_BEg = map { $s = $_; chomp $s; ( $s => 1 ) } @upregulated_genes_in_BEg; } ( $gene ) = m{(LOCUS\w+)}; print if $is_upregulated_gene_in_BEg{ $gene };  ' GCA_900659725.1_ASM90065972v1_genomic.gff

Один -лайнер считывает содержимое файла с активированными генами в хэш. Затем он использует этот хеш для поиска, содержит ли хэш слово LOCUS...в текущей строке. Если в хеше есть слово, печатается строка.

Оболочка Perl one -использует эти флаги командной строки:
-e:Указывает Perl искать код в строке -, а не в файле.
-n:Перебирать ввод по одной строке за раз, назначая его на $_по умолчанию.
-l:Удалите разделитель входных строк("\n"на *NIX по умолчанию )перед выполнением кода в строке -и добавьте его при печати.

СМ. ТАКЖЕ:
perldoc perlrun:как запустить интерпретатор Perl :переключатели командной строки
perldoc perlre:Perl регулярные выражения (регулярные выражения)
perldoc perlre:Perl регулярные выражения (регулярные выражения ):Квантификаторы; Классы персонажей и другие специальные побеги; утверждения; Группы захвата
perldoc perlrequick:Быстрое начало работы с регулярными выражениями Perl

1
04.10.2021, 21:04

Теги

Похожие вопросы