为多个 fastq 中的每次读取创建读取长度计数

问题描述 投票:0回答:1

我有一个包含许多 fastq 文件的目录。我正在使用此命令来计算读取长度并输出到新文件中。

sed -n '2~4p' FAX08345_abafd786_a8df7914_1131.fastq | awk '{ print length }' > len.text

我想将此命令应用于目录中的所有 fastq 文件,并且我需要输出以创建唯一的文件名 len.x,例如,其中 x = fastq 的文件名。

我在 Bash 工作。

这是我的文件列表的片段:

FAX08345_abafd786_a8df7914_1131.fastq  FAX08345_abafd786_a8df7914_1173.fastq  FAX08345_abafd786_a8df7914_60.fastq
FAX08345_abafd786_a8df7914_1135.fastq  FAX08345_abafd786_a8df7914_1175.fastq  FAX08345_abafd786_a8df7914_64.fastq 
bash loops
1个回答
0
投票

听起来这可能就是您想要做的:

awk '
    FNR == 1 { close(out); out="len."FILENAME }
    FNR >= 2 { print length() > out }
    FNR == 4 { nextfile }
' *.fastq

如果你的 awk 不支持

nextfile
那么将其更改为:

awk '
    FNR == 1 { close(out); out="len."FILENAME }
    (2 <= FNR) && (FNR <= 4) { print length() > out }
' *.fastq

它的运行速度只会比您使用

nextfile
慢一点。

如果输入文件为空或包含的行数少于 2 行,则上述内容不会生成输出文件。如果这是一个问题,那么请更新您的问题,将此类情况包含在示例输入/输出中,并说明应如何处理以及您使用的 awk 变体(因为使用 GNU awk for

BEGINFILE/ENDFILE
更容易处理)。

我建议,给定一个输入文件

foo.fastq
,不要创建名为
len.foo.fastq
的输出文件,而是创建一个名为
foo.fastq.len
foo.len
的输出文件,这样,如果您必须再次运行该工具,则
*.fastq
shell 通配不会获取您的
len
文件。为此,请使用以下任一方法代替
out="len."FILENAME

out=FILENAME".len"
out=FILENAME; sub(/\.[^.]+$/,".len",out)
© www.soinside.com 2019 - 2024. All rights reserved.