有条件的bash用于连接多个文件

时间:2016-09-26 09:10:20

标签: bash

我正在使用多个文件,我希望在进一步处理管道之前将其连接起来。通常我需要连接1到3个不同的文件对,但偶尔会有超过3对。我想用条件调整我的脚本,所以不要使用绝对数字,我只是传递一个条件(1或大于1个文件)来连接。我想知道是否有人能给我一个提示:

if [ $no_lanes -eq "1" ]; then
        fq_align_1=$lane1_pair1
        fq_align_2=$lane1_pair2
fi

if [ $no_lanes -eq "2"  ]; then
        cat $lane1_pair1 $lane2_pair1 > "$sampleID"_cat1.fq
        cat $lane1_pair2 $lane2_pair2 > "$sampleID"_cat2.fq
        fq_align_1="$sampleID"_cat1.fq
        fq_align_2="$sampleID"_cat2.fq
fi

if [ $no_lanes -eq "3" ]; then
        cat $lane1_pair1 $lane2_pair1 $lane3_pair1 > "$sampleID"_cat1.fq
        cat $lane1_pair2 $lane2_pair2 $lane3_pair3 > "$sampleID"_cat2.fq
        fq_align_1="$sampleID"_cat1.fq
        fq_align_2="$sampleID"_cat2.fq
fi ....

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,那么一个简单的for循环就可以了。

cat "$lane1_pair1" > "$sampleID"_cat1.fq
cat "$lane1_pair2" > "$sampleID"_cat2.fq

for (( n=2; n<=no_lanes; n++ )) {
        pair1var=lane${n}_pair1
        pair2var=lane${n}_pair2
        cat "${!pair1var}" >> "$sampleID"_cat1.fq
        cat "${!pair2var}" >> "$sampleID"_cat2.fq
}

fq_align_1="$sampleID"_cat1.fq
fq_align_2="$sampleID"_cat2.fq

编辑:修复了循环中的变量间接。出于某种原因,我在想我是在循环中制作文件名。然而,它实际上是在制作变量名。这样做可以使用$ {!...}扩展来轻微间接。

相关问题