改进 bash 脚本以计算 fastq 文件的一些技巧

Some tips to improve a bash script for count fastq files

大家好,我收到了bash一行,我想制作一个脚本

for i in 'ls *.fastq.gz'; do echo $(zcat ${i} | wc -l)/4|bc; done

我想把它作为一个脚本来从数据目录中读取并打印出带有文件名的结果。

我试图将目录放在 'data/*.fastq.gz' 前面,但出现错误,不存在这样的目录...

我想要这样的:

name1.fastq.gz 1898516
name2.fastq.gz 2467421
namen.fastq.gz 1234532

我对bash没有经验。

你们能帮忙吗?
谢谢

将目录作为参数,但如果未设置则默认为当前目录。

dir="${1-.}"

然后将其放入 glob 中:"$dir"/*.fastq.gz

还有:

放在一起:

#!/bin/bash

dir="${1-.}"

for file in "$dir"/*.fastq.gz; do
    printf '%s ' "$file"
    lines="$(zcat -- "$file" | wc -l)"
    bc <<< "$lines/4"  # Using a here-string (Bash feature)
done

整数数学运算(除以 4)无需转义到 bc,也无需使用 'ls' 枚举文件。原版稍作改动:

#!/bin/bash

dir="${1-.}"

for i in "$dir"/*.fastq.gz; do
  lines=$(zcat "${i}" | wc -l)
  printf '%s %d\n' "$i" "$((lines/4))"
done