首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用%替换Bash字符串

使用%替换Bash字符串
EN

Stack Overflow用户
提问于 2020-10-30 18:51:21
回答 1查看 23关注 0票数 0

我有一个以此格式命名的文件列表:

代码语言:javascript
复制
S2_7-CHX-2-5_Chr5.bed
S2_7-CHX-2-13_Chr27.bed
S2_7-CHX-2-0_Chr1.bed 

我需要遍历每个文件来执行任务。以前,我给它们命名时没有使用step 2指示符("S2"),这种格式工作得很好:

代码语言:javascript
复制
for FASTQ in *_clean.bam; do
  SAMPLE=${FASTQ%_clean.bam}
  echo $SAMPLE
  echo $(samtools view -c ${SAMPLE}_clean.bam)
done

但是现在我在想要设置为变量的前面有了S2,这将返回一个空的“示例”变量列表。如何重写以下代码以仅指定S2_*.bed?

代码语言:javascript
复制
for FASTQ in S2_*.bed; do
  SAMPLE=${S2_FASTQ%.bed}
  echo $SAMPLE
done

编辑:我试图从每个文件中分离出唯一的名称,例如"7-CHX-2-13_Chr27“,这样我就可以在以后引用它。我不能使用"S2“作为其中的一部分,因为我想在下一步使用"S3”重命名该文件,依此类推。

下面是我尝试使用它的示例:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 18:57:49

变量的名称仍然是$FASTQ,S2_不是变量名称的一部分,而是它的值。

代码语言:javascript
复制
sample=${FASTQ%.bed}
#        ~~~~~|~~~~
#          |  |  |
#    Variable |  What to remove
#     name    |
#           Remove
#        from the right

如果要从$sample中删除S2_,请使用左侧删除:

代码语言:javascript
复制
sample=${sample#S2_}

删除不能合并,您必须分两步进行。

请注意,我使用了小写的变量名。环境和内部shell变量应保留大写。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64606932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档