쉘 스크립트에서 파일 데이터를 추출하는 중 오류가 발생했습니다.

쉘 스크립트에서 파일 데이터를 추출하는 중 오류가 발생했습니다.

쉘 스크립트를 작성하려고 하는데 이해할 수 없는 오류가 발생합니다. 스크립트는 다음과 같습니다.

#!/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

demuxR1 및 demuxR2 폴더의 파일에는 파일이 포함되어 있습니다.여기에 이미지 설명을 입력하세요.명칭은 그림과 같습니다. 출력은 alldemulti라는 다른 폴더로 리디렉션되어야 합니다. 스크립트를 실행하면 불평합니다.

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

R1_new.txt파일 이름 포함 :

    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

누군가 내가 여기서 뭘 잘못하고 있는지 말해 줄 수 있습니까?

디렉토리 내용 demuxR1:

합계 4426752
-rwxrwxrwx 1 Molloy Molloy561 10월 15일 08:46 Barcode_R1.txt
-rwxrwxrwx 1 molloy molloy231092 10월 15일 09:14 SAE1903.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 molloy molloy235734 10월 15일 09:14 SAE1903.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 Molloy Molloy917692 10월 15일 09:14 SAE2000.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 Molloy Molloy935522 10월 15일 09:14 SAE2000.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1129320 10월 15일 09:14 SAE2103.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 Molloy Molloy1151554 10월 15일 09:14 SAE2103.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 molloy molloy747736 10월 15일 09:14 SAE2203.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 Molloy Molloy762462 10월 15일 09:14 SAE2203.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 molloy molloy446168 10월 15일 09:14 SAE2303.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 Molloy Molloy455044 10월 15일 09:14 SAE2303.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 Molloy Molloy378862 10월 15일 09:14 SAE2403.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 Molloy Molloy386440 10월 15일 09:14 SAE2403.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 Molloy Molloy960420 10월 15일 09:14 SAE2603.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 molloy molloy979364 10월 15일 09:14 SAE2603.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1256116 10월 15일 09:14 SAE2803.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 Molloy Molloy1281112 10월 15일 09:14 SAE2803.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy 2258319418 10월 15일 09:14 Unknown.R1.fastq
-rwxrwxrwx 1 moloy moloy 2257956950 10월 15일 09:14 Unknown.R2.fastq

디렉토리 내용 demuxR2:

합계 4427776
-rwxrwxrwx 1 Molloy Molloy560 10월 14일 12:48 Barcode_R2.txt
-rwxrwxrwx 1 Molloy Molloy261854 10월 15일 10:11 SAE1903.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 molloy molloy256718 10월 15일 10:11 SAE1903.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1284362 10월 15일 10:11 SAE2000.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 Molloy Molloy1259358 10월 15일 10:11 SAE2000.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1208280 10월 15일 10:11 SAE2103.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 molloy molloy1184716 10월 15일 10:11 SAE2103.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1028542 10월 15일 10:11 SAE2203.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 Molloy Molloy1008462 10월 15일 10:11 SAE2203.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 molloy molloy627558 10월 15일 10:11 SAE2303.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 molloy molloy615364 10월 15일 10:11 SAE2303.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 molloy molloy414098 10월 15일 10:11 SAE2403.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 molloy molloy405878 10월 15일 10:11 SAE2403.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1231900 10월 15일 10:11 SAE2603.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 Molloy Molloy1208060 10월 15일 10:11 SAE2603.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 Molloy Molloy1784282 10월 15일 10:11 SAE2803.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 Molloy Molloy1749406 10월 15일 10:11 SAE2803.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy 2256301114 10월 15일 10:11 Unknown.R1.fastq
-rwxrwxrwx 1 moloy moloy 2256668336 10월 15일 10:11 Unknown.R2.fastq

답변1

입력 파일에는 실제로 다음과 같이 한 줄에 하나의 파일 이름만 포함되어 있다고 가정합니다.

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

스크립트는 각 줄을 읽으 므로 id첫 번째 줄 뒤의 id값 은 입니다 SAE1903.barcode.in.R1.R1.fastq. 지금 이 변수를 사용하면 $id.barcode.in.R1.R1.fastq변수가 값으로 대체된 다음 .barcode.in.R1.R1.fastq나머지 문자열( )이 추가됩니다. 물론 이름이 아무것도 없기 때문에 오류가 발생합니다 SAE1903.barcode.in.R1.R1.fastq.barcode.in.R1.R1.fastq.

간단한 해결책(파일에 짝수 줄이 있다고 가정)으로 이 문제를 극복할 수 있습니다.

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

예 를 들어 파일에서 읽은 문자열의 첫 번째 지점 앞의 단어 ${line1%%.*}로 대체됩니다 .SAE1903

관련 정보