Как искать строки, удовлетворяющие более чем одному критерию в Unix?

sed -e 's|.*/|[#|' file1

Результат

[#foo
[#bar
[#baz
-1
15.10.2020, 17:57
1 ответ

Да, вы можете сделать это с помощьюgrep:

grep -c 'gene.*+' file

Это будет искать строки, где слово geneпоявляется первым и как отдельное слово (\bозначает «слово -разрыв» ), а затем, в той же строке, у вас также есть +как отдельное слово. Флаг -cуказывает grepнапечатать количество совпадающих строк. Если вам также нужно найти случаи, когда +стоит перед gene, вы можете сделать:

grep -Ec '(gene.*\+)|(\+.*gene)' file

Это, однако, также будет соответствовать таким вещам, как Eugene+Mary came for dinner, что, вероятно, не то, что вам нужно. Учитывая слова, которые вы ищете, я предполагаю, что вы просматриваете файлы gff/gtf, поэтому вы можете сделать что-то более сложное и искать только geneв третьем поле каждой строки и +в в-седьмых, в строках, которые не начинаются с #(, заголовки gff ). Если это действительно то, что вам нужно, вы можете сделать:

awk -F"\t" '!/^#/ && $3=="gene" && $7=="+"{c++}END{print c}'
1
18.03.2021, 22:57

Теги

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