Faz um loop por 384 pares e cria 384 novos arquivos concatenados

0

Eu tenho 384 pares de arquivos cujos nomes diferem por um único caractere. Estes representam arquivos fastq da pista 1 e da pista 2 de um sequenciador. Antes que eu possa analisá-los, preciso concatenar cada par.

AA01_S1_L001_R1_001.fastq.gz e AA01_S1_L002_R1_001.fastq.gz até DH12_S384_L002_R1_001.fastq.gz . Eu gostaria de acrescentar L002 a L001 e criar 384 novos arquivos no diretório irmão para serem usados na análise.

Eu tentei fazer isso em R, mas os pacotes que usei estavam desatualizados. Eu estou pensando que isso é trivial no Unix, mas meu conhecimento de unix é bastante noobish.

Edite para responder a perguntas: Eu acho que estes são apenas arquivos gzip sem um índice. Veja a saída abaixo. Eu não acho que preciso de nenhum tipo de índice. Por último, sim, a única diferença entre os pares é o L001 versus L002 e os nomes de saída devem ter o nome do L001 (a saída do pipe para o diretório irmão).

gzip -cd AA01_S1_L001_R1_001.fastq.gz | head
@D00572:249:HT7WJBCXX:1:1106:8558:1978 1:N:0:AAGACTCTT+AAGGTGTTT
CAGCACCCATGACCGTGCCATTGCTCTCCTTGTCAAAGACACGCAGGCCC
+
DDDDDIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIII
@D00572:249:HT7WJBCXX:1:1106:12310:1984 1:N:0:AAGACTCTT+AAGGTGTTT
CCAAAGTCTCAGGACCAACAGGAATTTTGATTGGTGCACCAGAATCCAGT
+
DDDDDHIIIIIIIIIIIIIIIIHHIIIIIIIIIIIIIHIIIIIIIIIIIH
@D00572:249:HT7WJBCXX:1:1106:12936:1969 1:N:0:AAGACTCTT+AAGGTGTTT
NAAAGGACCTTGATCTCTTCCTCATATCTGTCTTCCTTCTGCGAGTACTT
    
por akaDrHouse 03.04.2017 / 14:41

1 resposta

4

Arquivos compactados com gzip podem ser simplesmente concatenados juntos (embora ainda compactados), portanto, não é necessário primeiro descompactar os arquivos. Quando você descompactar o arquivo compactado concatenado, obterá os dados não compactados concatenados. Isso também é verdade para pelo menos xz .

Para a concatenação, podemos percorrer todos os arquivos L001 , criar o nome do arquivo do par correspondente e concatenar os dois para um arquivo em um novo diretório:

mkdir output_dir

for name in *_L001_R1_001.fastq.gz; do
    other="${name/_L001/_L002}"
    cat "$name" "$other" >output_dir/"$name"
done

Aqui, ${name/_L001/_L002} substituirá a primeira ocorrência da string _L001 por _L002 no valor de $name , criando o par de arquivos correspondente. Este outro nome de arquivo é armazenado na variável $other .

Os dois arquivos são concatenados com cat e o resultado é gravado em um novo arquivo no diretório output_dir . Os arquivos originais são deixados no lugar.

Isso pressupõe um shell como bash ou ksh93 que entende ${parameter/pattern/string} .

    
por 03.04.2017 / 14:59

Tags