regex - 确定哪些文件至少有特定数量的与模式匹配的行
问题描述
我正在寻找一种方法来识别具有至少 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
吗?
解决方案
这应该可以完成工作:
grep -Hc '^>' * 2>/dev/null | awk -F':' '$2 > 3 {print $1}'
这个怎么运作 :
grep -Hc '>' *
计算所有内容中包含“>”的行(“*”)2>/dev/null
抑制错误消息,因为-inggrep
on*
也匹配目录并导致错误- 对于每个匹配,
grep
输出fileName:n
,n 是找到的匹配数 - 然后教 awk 读取每一行的第二个字段('$2'),如果这大于 3(
$2 > 3
部分),则显示文件名,即该行的第一个字段(即$1
) - 该
-F':'
部分指示 awk 什么是字段分隔符
推荐阅读
- unix - Repository packages-microsoft-com-prod 在配置中多次列出
- greenplum - 通过 PXF 查询外部表失败
- java - Java 是否位于 Chomsky Hierarchy 的 Type-0 lavel 中?
- autodesk-forge - 对链接模型中的元素使用 Autodesk Forge Viewer 的搜索功能时,返回的 dbId 无法进行 fitToView,但 dbId + 1 有效?
- java - java - 如何在Java 8中使用带有null和空检查的平面地图合并多个列表?
- angular - Angular slickgrid 未在动态选项卡内显示(ngx-bootstrap 选项卡集)
- obiee - 我们如何在 1 个代理中安排 5 个具有 5 个用户的报告?
- google-sheets - 为什么当 Range 不为空时,Query 函数会导致空单元格?
- autoit - 想要将 Send("sun@123!") 作为字符串传递,但它不起作用
- c++ - 奇怪的未定义引用`vtable