我正在尝试编写一个 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