Como entrar em loop

1

Eu tenho 500 pastas que contêm muitos arquivos * _2.fastq.gz _1.fastq.gz e * por pasta.

Eu quero:

cat *_1.fastq.gz > Combined *_1.fastq.gz & cat *_2.fastq.gz > Combined_2.fastq.gz

por pasta.

Como faço para isso? Eu gostaria de aprender um pouco de bash, estou confortável com python

    
por zazga 11.03.2015 / 14:42

3 respostas

2
for i in {1..2} ; do cat *_$i.fastq.gz >>Combined_$i.fastq.gz ; done

Isso provavelmente não funcionará bem, como arquivos gzip concatenados; Eu imagino que você preferiria usar zcat *_$i.fastq.gz >>Combined_$i.fastq & amp; então gzip; ou talvez melhor, simplesmente descartar a idéia de cat & amp; faça isso:

for i in {1..2} ; do tar -c *_$i.fastq.gz >Combined_$i.fastq.gz.tar; done

por pasta - para recapitular as pastas, simplesmente coloque a linha acima em um loop adicional e execute-a a partir da pasta de nível superior:

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

Então, aqui, o índice de loop $ f escolhe cada pasta; salva seu lugar; cd para a pasta; executa o loop; retorna ao diretório original & amp; volta novamente.

O pushd / popd está lá para garantir que um erro não o faça perder o sistema de arquivos! Não é estritamente necessário, mas é útil para aprender.

    
por Mark Williams 11.03.2015 / 15:02
1

Este não é um ótimo exemplo para aprender bash, mas a maneira mais simples é:

zcat *_1.fastq.gz | gzip > Combined_1.fastq.gz &
zcat *_2.fastq.gz | gzip > Combined_2.fastq.gz

Usando um loop:

for f in *_1.fastq.gz; do
    zcat "$f"
done | gzip > Combined_1.fastq.gz

Notas

  • você iterar sobre os resultados de um padrão glob - não seja tentado a analisar a saída de ls ( link )
  • cite seu "$variables" quando quiser o valor
  • você pode redirecionar ou canalizar a saída de um loop inteiro ou while.
por glenn jackman 11.03.2015 / 14:59
-1

Você precisa de algo como

for d in */
    do cd $d && cat *_1.fastq.gz > Combined_1.fastq.gz && cat *_2.fastq.gz > Combined_2.fastq.gz
done
    
por Tolga Ozses 11.03.2015 / 15:00