我有很多以 fastq.gz 结尾的 fastq 文件。
rep1.fastq.gz
rep2.fastq.gz
rep3.fastq.gz
rep4.fastq.gz
.....
我希望我的输出为
rep1.fastq.gz 23516782
rep2.fastq.gz 45126780
rep3.fastq.gz 67543908
rep4.fastq.gz 76425368
其中第 1 行显示我的每个输入文件,第 2 行显示每个文件中的序列数。
为了实现这一点,我编写了一个小 bash 脚本来计算每个文件中的序列数,并将每个文件之后写入的数字作为输出
for sample in *.fastq.gz;do echo -en $sample "\t";(zcat $sample|wc -l)/4|bc ;done
我收到一个错误:-bash: 意外标记 `/4' 附近的语法错误
忽略假设每个序列有 4 行可能出错的所有内容......您上面显示的命令应该使用以下格式
你正在运行这个:
shell不理解那里的唯一
/4
,这就是它失败的原因。我怀疑你想要的是获取命令的结果zcat $sample|wc -l
,然后打印该值/4
并将其传递给bc
. 如果是这样,您$()
不仅需要而且()
还需要引用它:所以这意味着:
或者,更便携一点:
或者,您可以在以下位置完成所有操作
awk
:但是,请注意,fastq 格式的定义中没有任何内容表明文件每个序列只有 4 行。如果你很了解你的数据,你可以使用这种方法,但如果你需要处理任意 fastq 文件,你不能假设只有 4 行,最好使用专用工具。
你可能会觉得这个问答很有趣:Fast way to count number of reads and number of bases in a fastq file? .
还有FASTQ 文件格式规范,它阐明了你不能假设每个条目只有 4 行。也就是说,根据我过去约 7 年在临床环境中处理人类 NGS 数据的重要经验,我见过的每个文件每个样本只有 4 行。但我不使用长读取数据,并且格式本身允许更多,因此需要考虑。