2016-09-26 129 views
-1

我正在处理多个文件,我想在进一步处理管道之前连接。通常我需要连接1到3个不同的文件对,但偶尔会有三对以上的文件。我想调整我的脚本有条件的,而不是绝对数量,我只是传递一个条件(1或大于1的文件)连接。我想知道如果任何人都可以给我一个提示:有条件地在bash中连接多个文件

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 .... 
+0

请仔细阅读是什么使[最小,完整和可验证示例](http://stackoverflow.com/help/mcve) – Inian

+0

什么是您的示例输入和预期输出? – Inian

+0

我的输入是原始fastq数据(用于存储DNA序列的基于文本的格式)。我有一个包含正向数据的文件和一个包含反向数据的文件。有时候,我需要将所有正向数据连接在一起并将数据反向到一对以上(F&R)。 –

回答

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 

编辑:修正循环中的变量间接。出于某种原因,我在想,我正在循环中制作文件名。但它实际上是制作变量名称。这样做需要使用$ {!...}扩展稍微间接。

+0

非常感谢。这正是我所期待的! –

+0

@Naeglaria,很高兴我能帮上忙。如果它解决了您的问题,请随时正式接受此答案。 :) – ccarton

+0

我无法为您的答案投下我的投票,因为我没有足够的信用! “感谢您的反馈!对于名声低于15的人投下的选票进行了记录,但不会更改公开显示的职位得分。” –