我有一个以此格式命名的文件列表:
S2_7-CHX-2-5_Chr5.bed
S2_7-CHX-2-13_Chr27.bed
S2_7-CHX-2-0_Chr1.bed 我需要遍历每个文件来执行任务。以前,我给它们命名时没有使用step 2指示符("S2"),这种格式工作得很好:
for FASTQ in *_clean.bam; do
SAMPLE=${FASTQ%_clean.bam}
echo $SAMPLE
echo $(samtools view -c ${SAMPLE}_clean.bam)
done但是现在我在想要设置为变量的前面有了S2,这将返回一个空的“示例”变量列表。如何重写以下代码以仅指定S2_*.bed?
for FASTQ in S2_*.bed; do
SAMPLE=${S2_FASTQ%.bed}
echo $SAMPLE
done编辑:我试图从每个文件中分离出唯一的名称,例如"7-CHX-2-13_Chr27“,这样我就可以在以后引用它。我不能使用"S2“作为其中的一部分,因为我想在下一步使用"S3”重命名该文件,依此类推。
下面是我尝试使用它的示例:
for FASTQ in S2_*.bed; do
SAMPLE=${S2_FASTQ%.bed}
echo $SAMPLE
#rename each mapping position with UCSC chromosome name using sed
while IFS=, read -r f1 f2; do
#rename each file
echo " sed "s/${f1}.1/chr${f2}/g" S2_${SAMPLE}_Chr${f2}.bed > S3_${SAMPLE}_Chr${f2}.bed" >> $SCRIPT
done < $INPUT
done发布于 2020-10-30 18:57:49
变量的名称仍然是$FASTQ,S2_不是变量名称的一部分,而是它的值。
sample=${FASTQ%.bed}
# ~~~~~|~~~~
# | | |
# Variable | What to remove
# name |
# Remove
# from the right如果要从$sample中删除S2_,请使用左侧删除:
sample=${sample#S2_}删除不能合并,您必须分两步进行。
请注意,我使用了小写的变量名。环境和内部shell变量应保留大写。
https://stackoverflow.com/questions/64606932
复制相似问题