改进 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
还有:
- Quote variables and command expansions.
- Don't parse
ls
.
- 不要相信
echo
任意数据(文件名)。 Use printf
instead.
- 在为命令提供文件名时使用选项结束标志
--
。
- 我不希望有任何内联命令扩展,但这只是个人喜好
放在一起:
#!/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
大家好,我收到了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
还有:
- Quote variables and command expansions.
- Don't parse
ls
. - 不要相信
echo
任意数据(文件名)。 Useprintf
instead. - 在为命令提供文件名时使用选项结束标志
--
。 - 我不希望有任何内联命令扩展,但这只是个人喜好
放在一起:
#!/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