извлечение определенных подстрок из строки

Я пытаюсь написать сценарий 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 

Теперь в части SOMETHING я хочу определить некоторые переменные, которые я буду использовать позже в своем коде. Мне нужно извлечь эти значения из моей строки: A-122-3.BH7WBVADXX.lane_1_P1_I24.hg19.sequence.fastq

Мне нужен ID = A-122-3-BH7WBVADXX-1

Мне нужен PU = BH7WBVADXX

Мне нужен LB = A-122-3

Тогда я решит его дальше.

ПРИМЕЧАНИЕ. FILENAME не имеют одинаковой длины. A-122-3 ЧАСТЬ ДЕЙСТВУЕТ ДЛЯ РАЗЛИЧНЫХ ОБРАЗЦОВ И ТАКЖЕ ЭТОЙ ЧАСТИ I24. благодаря

One Solution collect form web for “извлечение определенных подстрок из строки”

Предполагая, что каждое имя файла, которое вы обрабатываете, имеет одинаковую длину и что каждая подстрока имеет одинаковую длину, вы можете разбить на основе этого. Кроме того, убедитесь, что из -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 
  • Как запустить Firefox из сценария?
  • Повторение общего номера страницы в скрипте Bash
  • Есть ли «обратное судо»?
  • итерации по каталогу, проверьте, являются ли элементы файлами или каталогами
  • смотреть файл и сравнивать контрольную сумму
  • найти проблему в скрипте bash
  • разделение файлов на основе их имени
  • Определение функции оболочки: почему есть место после открытия скобки?
  • Получить дату последнего дня последнего месяца в сценарии оболочки
  • условные включения ifdef для оболочки
  • Как автоматизировать повторяющийся процесс с использованием сценариев оболочки
  • Linux и Unix - лучшая ОС в мире.