2016-09-20 26 views
0

我有一個文件夾中需要合併的一些文件,我正在尋找一個好的命令來做到這一點。該文件是這樣的:使用zcat批量合併文件列表

Concatenate Together: 
A1_S1_L001_R1_001.fastq.gz 
A1_S1_L002_R1_001.fastq.gz 
A1_S1_L003_R1_001.fastq.gz 
A1_S1_L004_R1_001.fastq.gz 

Concatenate Together: 
A1_S1_L001_R2_001.fastq.gz 
A1_S1_L002_R2_001.fastq.gz 
A1_S1_L003_R2_001.fastq.gz 
A1_S1_L004_R2_001.fastq.gz 

Concatenate Together: 
B1_S1_L001_R1_001.fastq.gz 
B1_S1_L002_R1_001.fastq.gz 
B1_S1_L003_R1_001.fastq.gz 
B1_S1_L004_R1_001.fastq.gz 

Concatenate Together: 
B1_S1_L001_R2_001.fastq.gz 
B1_S1_L002_R2_001.fastq.gz 
B1_S1_L003_R2_001.fastq.gz 
B1_S1_L004_R2_001.fastq.gz 

etc. 

所以模式是對數百個文件的第一個字母和數字(A1或B1這裏)是指包含在這兩個亞組(R1和R2)的一組。主要羣體是A1-H1,A2-H2和A3-H3。在每個小組內有四個文件(L001,L002,L003,L004)。

有沒有一種很好的方式來簡單地將這些與zcat(或真的有其他方式)?

回答

2

像這樣的東西應該這樣做:

cd "/path/to/the/directory" || exit 1 
for num in {1..3}; do 
    for letter in {A..H}; do 
     for subgroup in R1 R2; do 
      zcat "$letter$num"_S1_L*_"$subgroup"_001.fastq.gz > "$letter$num-$subgroup" 
     done 
    done 
done 

您可能需要調整輸出文件的名稱(以及可能的路徑)。我使用了"$letter$num-$subgroup",例如B1-R1

+0

完美,謝謝。 –