我有一个包含如下变量的文本文件:
lane1_pair1="file1"
lane1_pair2="file2"
lane2_pair1="file3"
lane2_pair2="file4"
...
我想循环遍历变量并将它们连接在一个文件中。我将循环应用为:
. variables
for (( n=1; n<=no_lanes; n++ )) {
cat $"lane"${n}_pair1 >> "$sampleID"_cat1.fq
cat $"lane"${n}_pair2 >> "$sampleID"_cat2.fq
}
"$sampleID"_cat1.fq > fq_align_1
"$sampleID"_cat2.fq > fq_align_2
这里的问题是,cat命令不起作用,因为不是用"laneX_pairY"
替换它的值,而是将其视为字符串。我想知道这里是否有人对此有任何想法。
答案 0 :(得分:0)
正如我所看到的,问题是你是否循环遍历名为数组但不是一个的变量。然后,您将尝试评估从其他索引变量创建的变量名称的内容,这是一个易于破解的混乱代码的配方。我建议从variables
文件中创建实际的文件名数组:
p1_files=($(grep 'pair1' variables | cut -d '=' -f 2))
p2_files=($(grep 'pair2' variables | cut -d '=' -f 2))
for f in "${p1_files[@]}"; do
cat "${f//\"/}" >> "$sampleID"_cat1.fq
done
for f in "${p2_files[@]}"; do
cat "${f//\"/}" >> "$sampleID"_cat2.fq
done
我不确定您希望fq_align_n
个变量如何,但您可以使用以下命令将文件内容读取到变量:
fq_align_1=$(cat "$sampleID"_cat1.fq)
fq_align_2=$(cat "$sampleID"_cat2.fq)
或者只是完全跳过文件创建并在循环中逐步构建变量。