我试图编写一个 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
,即从文件读取的字符串中第一个点之前的单词。