文字列から特定の部分文字列を抽出する

文字列から特定の部分文字列を抽出する

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

関連情報