我有多个 fasta 文件,我想计算以 ">" 开头的行(无引号)。
我通常做的是
grep ">" file.fasta | wc -l
这一次适用于一个文件。我正在尝试使用不同的替代方案寻找命令但似乎没有任何作用。我最后想要的是逐行、文件名并计算以 > 开头的行数。理想情况下它必须是一行
答案1
grep
可以用它的标志为你计数-c
,所以wc -l
不需要。另外,grep
如果您提供多个文件,则将其作为输入。
例如,
grep -c '^>' some/dir/*.fa
要递归地执行此操作,请使用grep -Rc '^>' dirname
如果您有一个grep
知道该-R
选项的选项(这将运行全部文件),否则使用find
:
find dirname -type f \( -name '*.fa' -o -name '*.fasta' \) -exec grep -c '^>' /dev/null {} +
/dev/null
上面命令中的额外内容确保grep
获取至少两个输入文件,这反过来又确保它将始终显示其处理的文件的名称(它不会对单个输入文件执行此操作)。也可以使用-H
with grep
,尽管这是一种非标准选项。
或者,将原始命令插入一个循环,该循环的路径名来自find
:
find dirname -type f \( -name '*.fa' -o -name '*.fasta' \) -exec sh -c '
for pathname do
printf "Counting in %s...\n" "$pathname"
grep "^>" "$pathname" | wc -l
done' sh {} +
由于您的命令本身不报告文件名,因此我添加了一条printf
提及它的语句。
有关的: