我有两个包含文件名的数组
files_ref=( ($find . -name '*.fasta') )
files_fq=( ($find . -name '*.fastq') )
我知道,如果我想迭代成对的项目,我会这样做:
for i in "${!files_ref[@]}"; do
printf "%s is in %s\n" "${files_ref[i]}" "${files_fq[i]}"
done
但是,我的第二个数组看起来像这样
file_ref=(
DI1.fasta
DI2.fasta
WT1.fasta
)
files_fq=(
DI1_P1.fastq
DI1_P2.fastq
DI1_P3.fastq
DI2_P1.fastq
DI2_P2.fastq
DI2_P3.fastq
WT1_P1.fastq
WT1_P2.fastq
WT1_P3.fastq
)
我必须迭代 files_ref 及其同一组中的所有相应项目:
DI1.fasta with DI1_P1.fastq DI1_P2.fastq DI1_P3.fastq
DI2.fasta with DI2_P1.fastq DI2_P2.fastq DI2_P3.fastq
WT1.fasta with WT1_P1.fastq WT1_P2.fastq WT1_P3.fastq
有什么建议吗?
...更清楚一点
我需要这样的迭代:
DI1.fasta DI1_P1.fastq
DI1.fasta DI1_P2.fastq
DI1.fasta DI1_P3.fastq
DI2.fasta DI2_P1.fastq
DI2.fasta DI2_P2.fastq
DI2.fasta DI2_P3.fastq
WT1.fasta WT1_P1.fastq
WT1.fasta WT1_P2.fastq
WT1.fasta WT1_P3.fastq
解决此问题的一种方法是首先提取前缀(DI1、DI2、WT1),然后进行两次迭代。例如,这个 Bash 脚本将产生您想要的输出:
prefixes=()
for name in "${file_ref[@]}"; do
prefixes+=("${name%.*}")
done
for prefix in "${prefixes[@]}"; do
echo -n "$prefix.fasta with "
for fq in "${files_fq[@]}"; do
if [[ $fq == $prefix* ]]; then
echo -n "$fq "
fi
done
echo # add a newline
done