extrair substrings específicos da string

1

Estou tentando escrever um script bash. Em um diretório eu tenho 2 arquivos fastq:

A-122-3.BH7WBVADXX.lane_1_P1_I24.hg19.sequence.fastq

A-122-3.BH7WBVADXX.lane_1_P2_I24.hg19.sequence.fastq

Eu só quero fazer um loop no P1, vamos dizer algo como isto

for f in *_P1*
do
   SOMETHING
done

Agora na parte de SOMETHING eu quero definir algumas varables que eu usaria mais tarde no meu código Eu preciso extrair esses valores da minha string: A-122-3.BH7WBVADXX.lane_1_P1_I24.hg19.sequence.fastq

Eu preciso de ID = A-122-3-BH7WBVADXX-1

Eu preciso de PU = BH7WBVADXX

Eu preciso de LB = A-122-3

Então eu vou resolver mais.

NOTA: O NOME DE ARQUIVO NÃO É DO MESMO COMPRIMENTO. A-122-3 PARTE VARIA PARA AMOSTRAS DIFERENTES E TAMBÉM ESTA PARTE I24 VARIES. Obrigado

    
por user3138373 08.04.2014 / 22:26

1 resposta

2

Supondo que cada nome de arquivo que você está processando tenha o mesmo comprimento e que cada substring tenha o mesmo comprimento, você pode dividir com base nisso. Além disso, certifique-se de onde vem a parte -1 do ID , então suponho que você obtenha de 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

Atualizar

Isso deve funcionar desde que certos pontos e sublinhados permaneçam consistentes:

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
    
por 08.04.2014 / 22:42