首页 > 解决方案 > 确定哪些文件至少有特定数量的与模式匹配的行

问题描述

我正在寻找一种方法来识别具有至少 3 个序列的FASTA文件。序列由以 开头的行标识>

以下是 5 个文件的示例:

文件 1

>sp1
ATTTT
>sp3
ATTGG
>sp3
ATTGAGGAGA
>sp4
AGGGGAGGACC
>sp5
AGGGGGG
>sp5
AGGGGGG

文件2

>sp1
ATTTT

文件 3

>sp1
ATTTT
>sp3
ATTGG
>sp3
ATTGAGGAGA
>sp4
AGGGGAGGACC
>sp5
AGGGGGG

文件4

>sp1
ATTTT
>sp3
ATTGG

文件5

>sp1
ATTTT
>sp3
ATTGG
>sp3
ATTGAGGAGA
>sp4
AGGGGAGGACC
>sp5
AGGGGGG

我想要输出:

file1
file3
file5 

因为这些是具有至少三个序列的文件。我可以这样做ls吗?

标签: regexshelltext-processinglsfasta

解决方案


这应该可以完成工作:

grep -Hc '^>' * 2>/dev/null | awk -F':' '$2 > 3 {print $1}'

这个怎么运作 :

  • grep -Hc '>' *计算所有内容中包含“>”的行(“*”)
  • 2>/dev/null抑制错误消息,因为-ing grepon*也匹配目录并导致错误
  • 对于每个匹配,grep输出fileName:n,n 是找到的匹配数
  • 然后教 awk 读取每一行的第二个字段('$2'),如果这大于 3($2 > 3部分),则显示文件名,即该行的第一个字段(即$1
  • -F':'部分指示 awk 什么是字段分隔符

推荐阅读