【发布时间】:2021-06-11 21:31:20
【问题描述】:
这一定很基础,但我找不到解决方法。
我有一个这样的脚本:
#!/bin/bash
seqFolder="/raw_data/data"
seqmode="paired"
Input=$(basename ${seqFolder});
if [ $seqmode = paired ]; then
for x in $seqFolder/*; do
if [[ "$x" =~ .*\.fastq.gz$ ]]; then
z=$(basename $x 1_001.fastq.gz)
echo $z
echo "file of this iteration $z"1_001.fastq.gz" $z"2_001.fastq.gz""
fi
done
fi
当我运行这个脚本时,我得到了这个:
MG-AB-17_S17_R
file of this iteration MG-AB-17_S17_R1_001.fastq.gz MG-AB-17_S17_R2_001.fastq.gz
MG-AB-17_S17_R2_001.fastq.gz
file of this iteration MG-AB-17_S17_R2_001.fastq.gz1_001.fastq.gz MG- AB-17_S17_R2_001.fastq.gz2_001.fastq.gz
MG-AB-81_S74_R
file of this iteration MG-AB-81_S74_R1_001.fastq.gz MG-AB-81_S74_R2_001.fastq.gz
MG-AB-81_S74_R2_001.fastq.gz
file of this iteration MG-AB-81_S74_R2_001.fastq.gz1_001.fastq.gz MG- AB-81_S74_R2_001.fastq.gz2_001.fastq.gz
/raw_data/data 中的文件是这 4 个(这只是示例):
MG-AB-17_S17_R1_001.fastq.gz
MG-AB-17_S17_R2_001.fastq.gz
MG-AB-81_S74_R1_001.fastq.gz
MG-AB-81_S74_R2_001.fastq.gz
问题是我不希望我的变量 $z 成为 MG-AB-17_S17_R2_001.fastq.gz 或 MG-AB-81_S74_R2_001.fastq.gz,因为文件如下:
MG-AB-17_S17_R2_001.fastq.gz1_001.fastq.gz
MG-AB-17_S17_R2_001.fastq.gz2_001.fastq.gz
...
目录/raw_data/data中不存在
我认为"$x" =~ .*\.fastq.gz$ 中的.fastq.gz$ 可以确保这一点,但似乎并非如此。能否请教。
【问题讨论】:
-
所有文件名都与正则表达式
.*\.fastq.gz$匹配。该检查应该如何排除这些文件? -
我只想匹配/解析/处理这4个文件:MG-AB-17_S17_R1_001.fastq.gz MG-AB-17_S17_R2_001.fastq.gz MG-AB-81_S74_R1_001.fastq.gz MG- AB-81_S74_R2_001.fastq.gz。问题是我的脚本(有漏洞)发明了新文件,例如:MG-AB-17_S17_R2_001.fastq.gz1_001.fastq.gz
-
问题是您要删除后缀
1_001.fastq.gz。但是有R2的文件没有那个后缀,所以basename不会去掉后缀。 -
标题与帖子正文的关系如何?
-
在循环中,您可以添加
if语句。当检查为真时,调用break退出循环。