2016-09-26 142 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的人投下的選票進行了記錄,但不會更改公開顯示的職位得分。」 –