尝试创建一个脚本,该脚本计算fastq文件中所有读取的长度,但是没有返回

时间:2019-05-09 22:12:47

标签: bash function shell unix fastq

我正在尝试计算从照明排序开始的fastq文件中每次读取的长度,并将其输出到tsv或任何类型的文件中,这样我以后就可以查看该计数并计算每个文件的读取次数。因此,我需要循环处理文件并取出读取的每一行(每4行),然后获取其长度并将其存储为输出

num=2
for file in *.fastq
do
    echo "counting $file"
    function file_length(){
    wc -l $file | awk '{print$FNR}'
    }
    for line in $file_length
    do
        awk 'NR==$num' $file | chrlen > ${file}read_length.tsv
        num=$((num + 4))
    done
done

目前,我所得到的都是$ file,没有其他输出,但是也没有错误

1 个答案:

答案 0 :(得分:0)

您的脚本在语法和算法上均包含很​​多错误。请尝试shellcheck以查看问题所在。最多的问题将是$file_length部分。 您可能要在此处调用函数file_length(),但这仅仅是 一个未定义的变量,在for循环中被评估为null。

如果您只想计算*.fastq文件第4行的长度, 请尝试以下方法:

for file in *.fastq; do
    awk 'NR==4 {print length}' "$file" > "${file}_length.tsv"
done

或者,如果您要将结果汇总到一个tsv文件中,请尝试:

tsvfile="read_lenth.tsv"
for file in *.fastq; do
    echo -n -e "$file\t" >> "$tsvfile"
    awk 'NR==4 {print length}' "$file" >> "$tsvfile"
done

希望这会有所帮助。