从字符串中提取特定子字符串

从字符串中提取特定子字符串

我正在尝试编写一个 bash 脚本。在目录中我有 2 个 fastq 文件:

A-122-3.BH7WBVADXX.lane_1_P1_I24.hg19.sequence.fastq

A-122-3.BH7WBVADXX.lane_1_P2_I24.hg19.sequence.fastq

我只想循环播放 P1 让我们这样说

for f in *_P1*
do
   SOMETHING
done

现在,在某些部分中,我想定义一些变量,稍后我将在代码中使用这些变量,我需要从字符串中提取这些值: A-122-3.BH7WBVADXX.lane_1_P1_I24.hg19.sequence.fastq

我需要ID = A-122-3-BH7WBVADXX-1

我需要PU = BH7WBVADXX

我需要LB = A-122-3

那我再进一步解决一下。

注意:文件名的长度不同。A-122-3不同样品的部分有所不同,此部分也有所不同I24各不相同。谢谢

答案1

假设您正在处理的每个文件名具有相同的长度,并且每个子字符串具有相同的长度,您可以基于此进行拆分。另外,确定-1上的零件ID来自哪里,所以我假设您是从 获得的lane_1

for file in *_P1*
do
  id=${file:0:18}-${file:24:1}
  pu=${file:8:10}
  lb=${file:0:7}

  echo "id=$id pu=$pu lb=$lb"
done

更新

如果某些点和下划线保持一致,这应该可以工作:

for file in *_P1*
do
  lb=${file%%.*}

  pu=${file%%.lane_*}
  pu=${pu#*.}

  num=${file%%_P*}
  num=${num##*_}

  id="$lb-$pu-$num"

  echo "id=$id pu=$pu lb=$lb"
done

相关内容