Erro de script da shell para extrair dados do arquivo

0

Eu tentei escrever um script de shell e ele está dando um erro que não consigo entender. O roteiro é assim:

#!/bin/bash
while read id 
do 
cat demuxR1/$id.barcode.in.R1.R1.fastq demuxR2/$id.barcode.in.R2.R2.fastq > alldemulti/$id.forwardread.fastq 
done < R1_new.txt

os arquivos nas pastas demuxR1 e demuxR2 contêm arquivos nomeado como mostrado. A saída deve ser redirecionada para outra pasta chamada alldemulti. Quando estou executando o script, ele reclama

cat: demuxR1/SAE1903.barcode.in.R1.R1.fastq.barcode.in.R1.R1.fastq: No such file or directory

O R1_new.txt associa os nomes dos arquivos:

    SAE1903.barcode.in.R1.R1.fastq
    SAE1903.barcode.in.R1.R2.fastq
    SAE2000.barcode.in.R1.R1.fastq
    SAE2000.barcode.in.R1.R2.fastq
    SAE2103.barcode.in.R1.R1.fastq
    SAE2103.barcode.in.R1.R2.fastq
    SAE2203.barcode.in.R1.R1.fastq
    SAE2203.barcode.in.R1.R2.fastq
    SAE2303.barcode.in.R1.R1.fastq
    SAE2303.barcode.in.R1.R2.fastq
    SAE2403.barcode.in.R1.R1.fastq
    SAE2403.barcode.in.R1.R2.fastq
    SAE2603.barcode.in.R1.R1.fastq
    SAE2603.barcode.in.R1.R2.fastq
    SAE2803.barcode.in.R1.R1.fastq
    SAE2803.barcode.in.R1.R2.fastq

Alguém pode me dizer o que estou fazendo de errado aqui?

Conteúdo do diretório demuxR1 :

total 4426752
-rwxrwxrwx 1 moloy moloy        561 Oct 15 08:46 barcode_R1.txt
-rwxrwxrwx 1 moloy moloy     231092 Oct 15 09:14 SAE1903.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy     235734 Oct 15 09:14 SAE1903.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy     917692 Oct 15 09:14 SAE2000.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy     935522 Oct 15 09:14 SAE2000.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy    1129320 Oct 15 09:14 SAE2103.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy    1151554 Oct 15 09:14 SAE2103.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy     747736 Oct 15 09:14 SAE2203.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy     762462 Oct 15 09:14 SAE2203.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy     446168 Oct 15 09:14 SAE2303.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy     455044 Oct 15 09:14 SAE2303.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy     378862 Oct 15 09:14 SAE2403.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy     386440 Oct 15 09:14 SAE2403.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy     960420 Oct 15 09:14 SAE2603.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy     979364 Oct 15 09:14 SAE2603.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy    1256116 Oct 15 09:14 SAE2803.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 moloy moloy    1281112 Oct 15 09:14 SAE2803.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy 2258319418 Oct 15 09:14 unknown.R1.fastq
-rwxrwxrwx 1 moloy moloy 2257956950 Oct 15 09:14 unknown.R2.fastq

Conteúdo do diretório demuxR2 :

total 4427776
-rwxrwxrwx 1 moloy moloy        560 Oct 14 12:48 barcode_R2.txt
-rwxrwxrwx 1 moloy moloy     261854 Oct 15 10:11 SAE1903.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy     256718 Oct 15 10:11 SAE1903.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy    1284362 Oct 15 10:11 SAE2000.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy    1259358 Oct 15 10:11 SAE2000.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy    1208280 Oct 15 10:11 SAE2103.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy    1184716 Oct 15 10:11 SAE2103.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy    1028542 Oct 15 10:11 SAE2203.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy    1008462 Oct 15 10:11 SAE2203.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy     627558 Oct 15 10:11 SAE2303.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy     615364 Oct 15 10:11 SAE2303.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy     414098 Oct 15 10:11 SAE2403.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy     405878 Oct 15 10:11 SAE2403.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy    1231900 Oct 15 10:11 SAE2603.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy    1208060 Oct 15 10:11 SAE2603.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy    1784282 Oct 15 10:11 SAE2803.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 moloy moloy    1749406 Oct 15 10:11 SAE2803.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy 2256301114 Oct 15 10:11 unknown.R1.fastq
-rwxrwxrwx 1 moloy moloy 2256668336 Oct 15 10:11 unknown.R2.fastq
    
por user1738234 15.10.2018 / 15:52

1 resposta

2

Eu suponho que o seu arquivo de entrada na verdade contém apenas um nome de arquivo por linha e se parece com isso:

SAE1903.barcode.in.R1.R1.fastq
SAE1903.barcode.in.R1.R2.fastq
SAE2000.barcode.in.R1.R1.fastq
...

Seu script lê cada linha em id , portanto, após a primeira linha, o valor de id é SAE1903.barcode.in.R1.R1.fastq . Se você agora usar isso como $id.barcode.in.R1.R1.fastq , a variável será substituída pelo valor e, em seguida, o restante da sequência ( .barcode.in.R1.R1.fastq ) será anexado. O que, claro, leva ao erro porque não existe um arquivo chamado SAE1903.barcode.in.R1.R1.fastq.barcode.in.R1.R1.fastq .

Uma solução simples (que assume um arquivo com um número par de linhas) para superar isso poderia ser

#!/bin/bash
while read line1; do
    read line2
    cat "demuxR1/$line1" "demuxR2/$line2" > "alldemulti/${line1%%.*}.forwardread.fastq"
done < R1_new.txt

O ${line1%%.*} será substituído por, e. SAE1903 , ou seja, a palavra antes do primeiro ponto na string lida no arquivo.

    
por 15.10.2018 / 17:10