문자열에서 특정 하위 문자열 추출

문자열에서 특정 하위 문자열 추출

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

관련 정보