Зацикливание файлов в папке для сценария оболочки с несколькими входами

Задание нескольких входов для инструмента командной строки?

Я новичок в bash и хочу зациклить программу командной строки над папкой, содержащей множество файлов.

Сценарий принимает два входных файла (в моем случае они отличаются в одном поле имени файла ("...R1" против "...R2"). Запуск одного экземпляра инструмента выглядит следующим образом:

tool_name infile1 infile2 -o outfile_suffix

Актуальный пример:

casper sample_name_R1_001.out.fastq sample_name_R2_001.out.fastq -o sample_name_merged

Формат имени файла:

DCP-137-5102-T1A3_S33_L001_R1_001.fastq
DCP-137-5102-T1A3_S33_L001_R2_001.fastq

Поле, выделенное полужирным шрифтом, будет варьироваться между различными парами (например, 2000, 2110, 5100 и т. Д.), Причем каждая пара будет выделена либо R1, либо R2.

Я хотел бы знать, как зациклить сценарий над папкой, содержащей множество пар сопоставляемых файлов, а также убедиться, что вывод (-o) получает суффикс "sample_name".

Я знаком с основными for file in ./*.*; do ... $file...; done но это явно не сработает для этого примера. Мы ценим любые предложения!

1 ответ

Решение

Вы хотите перебрать R1и выводить R2 и имена слитых файлов из этого, что-то вроде:

for file1 in ./*R1*; do
    file2=${file1/R1/R2}
    merge=${file1#*R1}_merged
    casper ${file1} ${file2} -o ${merge}
done

Примечание: уценка показывает #*R1}_merged как комментарий - это не

Другие вопросы по тегам