我有两个不同的文件扩展名abc.fq.gz
,abc.fastq.gz
我需要将它们更改为abc.sam
.
我试过这个:
#!/bin/bash
refdir="Homo_sapiens.GRCh38.dna_sm.primary_assembly"
forward=(*_1.{fq,fastq}.gz)
reverse=(*_2.{fq,fastq}.gz)
for i in "${!forward[@]}"
do
echo ${forward[i]//_1.{fq,fastq}.gz/.sam}>> a.txt
done
但这{fq,fastq}
部分不起作用。正如您在上面看到的,我需要将_1.fq.gz
或替换_2.fastq.gz
为.sam
,所以
- 输入是
abc_1.fq.gz
或者abc_1.fastq.gz
- 预期输出是
abc.sam
我怎样才能做到这一点?
答案1
您不能在 bash 参数扩展中使用大括号扩展,但可以使用 KSH 样式的扩展 glob。前任。
touch foo_1.fq.gz bar_1.fastq.gz
shopt -s nullglob extglob
forward=( *_1.{fq,fastq}.gz )
笔记:
add
nullglob
以防止将不匹配的 glob 添加到数组中不要用于
ls
填充数组 - 请参阅bash 陷阱 #1
然后
$ for i in ${!forward[@]}; do echo "${forward[i]/_1.@(fq|fastq).gz/.sam}"; done
foo.sam
bar.sam