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