Shell脚本提取文件数据时出错

Shell脚本提取文件数据时出错

我试图编写一个 shell 脚本,但它给出了一个我无法理解的错误。脚本是这样的:

#!/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 莫洛伊莫洛伊 561 十月 15 08:46 Barcode_R1.txt
-rwxrwxrwx 1 莫洛伊莫洛伊 231092 十月 15 日 09:14 SAE1903.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 235734 十月 15 日 09:14 SAE1903.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 917692 10 月 15 日 09:14 SAE2000.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 935522 10 月 15 日 09:14 SAE2000.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1129320 10 月 15 日 09:14 SAE2103.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1151554 10 月 15 日 09:14 SAE2103.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 747736 十月 15 日 09:14 SAE2203.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 762462 10 月 15 日 09:14 SAE2203.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 446168 10 月 15 日 09:14 SAE2303.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 455044 10 月 15 日 09:14 SAE2303.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 378862 10 月 15 日 09:14 SAE2403.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 386440 10 月 15 日 09:14 SAE2403.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 960420 10 月 15 日 09:14 SAE2603.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 979364 10 月 15 日 09:14 SAE2603.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1256116 10 月 15 日 09:14 SAE2803.barcode.in.R1.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1281112 10 月 15 日 09:14 SAE2803.barcode.in.R1.R2.fastq
-rwxrwxrwx 1 moloy moloy 2258319418 10 月 15 日 09:14 未知.R1.fastq
-rwxrwxrwx 1 moloy moloy 2257956950 10 月 15 日 09:14 未知.R2.fastq

目录内容demuxR2

总计 4427776
-rwxrwxrwx 1 莫洛伊莫洛伊 560 10 月 14 日 12:48 Barcode_R2.txt
-rwxrwxrwx 1 莫洛伊莫洛伊 261854 10 月 15 日 10:11 SAE1903.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 256718 10 月 15 日 10:11 SAE1903.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1284362 10 月 15 日 10:11 SAE2000.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1259358 10 月 15 日 10:11 SAE2000.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1208280 10 月 15 日 10:11 SAE2103.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1184716 10 月 15 日 10:11 SAE2103.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1028542 10 月 15 日 10:11 SAE2203.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1008462 10 月 15 日 10:11 SAE2203.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 627558 10 月 15 日 10:11 SAE2303.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 615364 10 月 15 日 10:11 SAE2303.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 414098 10 月 15 日 10:11 SAE2403.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 405878 10 月 15 日 10:11 SAE2403.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1231900 10 月 15 日 10:11 SAE2603.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1208060 10 月 15 日 10:11 SAE2603.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1784282 10 月 15 日 10:11 SAE2803.barcode.in.R2.R1.fastq
-rwxrwxrwx 1 莫洛伊莫洛伊 1749406 10 月 15 日 10:11 SAE2803.barcode.in.R2.R2.fastq
-rwxrwxrwx 1 moloy moloy 2256301114 10 月 15 日 10:11 未知.R1.fastq
-rwxrwxrwx 1 moloy moloy 2256668336 10 月 15 日 10:11 未知.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%%.*}被替换为eg SAE1903,即从文件读取的字符串中第一个点之前的单词。

相关内容