У меня есть 500 папок, содержащих многих * _1.fastq.gz и * _2.fastq.gz файлы на папку.
Я хочу:
cat *_1.fastq.gz > Combined *_1.fastq.gz & cat *_2.fastq.gz > Combined_2.fastq.gz
на папку.
Как я достигаю этого? Я хотел бы изучить некоторый удар, я доволен Python
for i in {1..2} ; do cat *_$i.fastq.gz >>Combined_$i.fastq.gz ; done
Это, вероятно, не будет работать хорошо, как сцепленные файлы gzip; Я полагаю, вы бы предпочли использовать zcat *_$i.fastq.gz >>Combined_$i.fastq
& amp; затем gzip; или, может быть, лучше, просто отказаться от идеи кошки & amp; сделайте это:
for i in {1..2} ; do tar -c *_$i.fastq.gz >Combined_$i.fastq.gz.tar; done
на папку - затем, чтобы просмотреть папки, просто заключите строку выше в следующем цикле и запустите это из папки верхнего уровня:
for f in *; do
pushd . ; cd $f
for i in {1..2} ; do tar -c *_$i.fastq.gz >Combined_$i.fastq.gz.tar; done
popd
done
Итак, здесь индекс цикла $ f выбирает каждую папку; экономит ваше место; диски в папку; выполняет цикл; возвращается в исходный каталог & amp; петли снова.
Здесь есть pushd / popd, чтобы гарантировать, что из-за ошибки вы не перемещаетесь по файловой системе! Не обязательно, но полезно учиться.
Это не яркий пример для изучения удара, но самый простой путь:
zcat *_1.fastq.gz | gzip > Combined_1.fastq.gz &
zcat *_2.fastq.gz | gzip > Combined_2.fastq.gz
Используя цикл:
for f in *_1.fastq.gz; do
zcat "$f"
done | gzip > Combined_1.fastq.gz
Примечания
ls
( http://mywiki.wooledge.org/ParsingLs ) "$variables"
, когда Вы хотите значение Вам нужно что-то как
for d in */
do cd $d && cat *_1.fastq.gz > Combined_1.fastq.gz && cat *_2.fastq.gz > Combined_2.fastq.gz
done