2016-09-20 7 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. 

Таким образом, картина, что для сотен файлов, первой буквы и цифры (А1 или В1 здесь) относится к группе, которая содержит в себе две подгруппы (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

Отлично, спасибо. –

Смежные вопросы