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