如何在 Unix 中搜索满足多个条件的行?

如何在 Unix 中搜索满足多个条件的行?

我想找到其中同时包含单词/模式“gene”和“+”的行数。用 grep 可以做到这一点吗?

答案1

是的,您可以通过以下方式执行此操作grep

grep -c 'gene.*+' file

这将查找该单词gene首先出现的行并作为单独的单词(\b意思是“断词”),然后在同一行上,您也将其+作为单独的单词出现。该-c标志告诉grep打印匹配行的数量。如果您还需要查找 出现在+之前的情况gene,您可以执行以下操作:

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

然而,这也会匹配诸如Eugene+Mary came for dinnerwhich可能不是你想要的东西。鉴于您正在寻找的单词,我猜测您正在查看 gff/gtf 文件,因此您可能想做一些更复杂的事情,并且只gene在每行的第三个字段和+第七个字段中查找不存在的行不以 a #(gff 标头)开头。如果这确实是您需要的,您可以这样做:

awk -F"\t" '!/^#/ && $3=="gene" && $7=="+"{c++}END{print c}'

相关内容