Объедините файлы fastq.gz с одинаковыми именами в разных локализациях в Google-Cloud - PullRequest
0 голосов
/ 17 октября 2019

Я хотел бы объединить несколько файлов fastq.gz с одинаковыми именами в разных папках в Google-Cloud. У меня в общей сложности 15 пациентов. У каждого пациента есть парные данные «R1» и «R2». Каждый R1 и R2 разделены на 4 файла. Размер каждого файла составляет приблизительно 28 ГБ.

Моя цель - объединить 4 файла для получения полных файлов fastq.gz R1 и R2 для каждого пациента.

Я никогда не работал сGoogle-Cloud до.

Вот как папки и файлы находятся в корзине (пример с 2 пациентами):

gs://bucketID
     /folder1
         /folder001
             Patient1_R1.fastq.gz
             Patient1_R2.fastq.gz
         /folder002
             Patient2_R1.fastq.gz
             Patient2_R2.fastq.gz
etc.

     /folder2
         /folder003
             Patient1_R1.fastq.gz
             Patient1_R2.fastq.gz
         /folder004
             Patient2_R1.fastq.gz
             Patient2_R2.fastq.gz
etc.

     /folder3
         /folder005
             Patient1_R1.fastq.gz
             Patient1_R2.fastq.gz
         /folder006
             Patient2_R1.fastq.gz
             Patient2_R2.fastq.gz
etc.

     /folder4
         /folder007
             Patient1_R1.fastq.gz
             Patient1_R2.fastq.gz
         /folder008
             Patient2_R1.fastq.gz
             Patient2_R2.fastq.gz
etc.

Я хочу сделать скрипт, предназначенный для fastq.gzфайлы с одинаковыми именами в разных папках, затем объединить их. Однако я не знаю, как это сделать в Google-Cloud.

Вот тот же пример с цветами (я хочу объединить файлы с тем же цветом):

Примерс цветами

Вот как я вижу скрипт bash:

bucket="bucketID"
dir1=$bucket/"folder1"
dir2=$bucket/"folder2"
dir3=$bucket/"folder3"
dir4=$bucket/"folder4"
destdir=$bucket/"destdir"

participants = (Patient1
                Patient2
               )

for i in ${participants[*]};
do
    zcat dir1/.../$i/_R1.fastq.gz dir2/.../$i/_R1.fastq.gz dir3/.../$i/_R1.fastq.gz dir4/.../$i/_R1.fastq.gz | gzip >$destdir/"merged_"$i/_R1.fastq.gz
    zcat dir1/.../$i/_R2.fastq.gz dir2/.../$i/_R2.fastq.gz dir3/.../$i/_R2.fastq.gz dir4/.../$i/_R2.fastq.gz | gzip >$destdir/"merged_"$i/_R2.fastq.gz

done

Должен ли я вместо этого использовать «gsutil compose» для объединения?

В конце яхотел бы иметь только два файла R1 и R2 для каждого пациента: merged_patient # _R1.fastq.gz и merged_patient # _R2.fastq.gz.

В приведенном выше примере это даст 4 файла:

merged_Patient1_R1.fastq.gz
merged_Patient1_R2.fastq.gz
merged_Patient2_R1.fastq.gz
merged_Patient2_R2.fastq.gz

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Хорошо, я нашел решение с помощью gsutil compose:

declare -a participantsArray=("Patient1"
                              "Patient2"
                             )
bucket="bucketID"
dir1=$bucket/"folder1"
dir2=$bucket/"folder2"
dir3=$bucket/"folder3"
dir4=$bucket/"folder4"
destdir=$bucket/"destdir"

for i in ${participantsArray[@]};
do
    fileR1="${i}_R1.fastq.gz"
    fileR2="${i}_R2.fastq.gz"

    gsutil compose "${dir1}/*/${fileR1}" "${dir2}/*/${fileR1}" "${dir3}/*/${fileR1}" "${dir4}/*/${fileR1}" "${destdir}/merged_${fileR1}"
    gsutil compose "${dir1}/*/${fileR2}" "${dir2}/*/${fileR2}" "${dir3}/*/${fileR2}" "${dir4}/*/${fileR2}" "${destdir}/merged_${fileR2}"

done

Как вы сказали, найти решение было несложно.

Еще раз спасибо!

0 голосов
/ 17 октября 2019

Я бы порекомендовал вам использовать следующую команду для объединения ваших файлов:

gsutil compose gs://bucket/obj1 [gs://bucket/obj2 ...] gs://bucket/composite

Вы можете проверить документацию в по этой ссылке .

IЯ пытался сделать простой сценарий bash с помощью команды "gsutil compose" с файлами fastq.gz, и он работал нормально для меня.

Команда compose создает новый объект, содержимое которого представляет собой конкатенациюзаданная последовательность исходных объектов в том же сегменте .

Надеюсь, это поможет!

...