Цикл для объединения нескольких пар файлов с почти одинаковыми именами в UNIX

У меня очень простой вопрос, но я не могу найти решение. У меня есть несколько файлов в одном каталоге, и я хотел бы объединить каждую пару файлов. Имена:

Sample1_R1_L001.fastq Sample1_R2_L001.fastq Sample2_R1_L001.fastq Sample2_R2_L001.fastq Sample3_R1_L001.fastq Sample3_R2_L001.fastq

(так далее...)

Результат, который я хочу, - это объединение по образцу, например, cat Sample1_R1_L001.fastq Sample1_R2_L001.fastq > Sample1_concat.fastq

Я попробовал этот цикл, найти . -name "_R?_"|при чтении файла; do "$file"R1*.fastq "$file"_R2_L001.fastq > "$file"_merged.fastq

но это не сработало. Какие-нибудь мысли?


person user3888272    schedule 29.07.2014    source источник
comment
Если быть точнее, имена файлов немного сложнее (что-то вроде MTNT-Enr-BS_S70_L001_R1_001.fastq), и у меня есть по одной паре для каждого образца (таким образом, MTNT-Enr-BS_S70_L001_R1_001.fastq и MTNT-Enr-BS_S70_L001_R2_001.fastq) . Я мог бы попытаться упростить имена, но в конечном итоге я хотел бы иметь возможность просто запускать цикл без особых настроек. Какие-либо предложения?   -  person user3888272    schedule 29.07.2014


Ответы (2)


Вот как бы я это сделал:

for i in {1..4}; do echo cat Sample"$i"* > combined_"$i".txt; done

Зацикливайте числа, затем создайте команду... получить фактические имена файлов, безусловно, возможно, но с оболочкой я просто делаю самую простую вещь, которая может работать, даже если это означает частичное грубое форсирование цикла.

Замените 1..4 на любые ограничения, и оболочка расширит это до всех различных чисел для вас.

person Adam D. Ruppe    schedule 29.07.2014
comment
Большое спасибо за ваш ответ. На самом деле имена файлов немного сложнее (больше похоже на MTNT-Enr-BS_S70_L001_R1_001.fastq), и у меня есть по одной паре для каждого образца (таким образом, MTNT-Enr-BS_S70_L001_R1_001.fastq и MTNT-Enr-BS_S70_L001_R2_001.fastq). Я мог бы попытаться упростить имена, но в конечном итоге я хотел бы иметь возможность просто запускать цикл без особых настроек. Какие-либо предложения? Спасибо еще раз! - person user3888272; 29.07.2014
comment
Хм, я не уверен, не видя более крупный пример имен. Как я уже сказал, с оболочкой я просто делаю быстрое хакерское решение, основанное на конкретной проблеме. - person Adam D. Ruppe; 30.07.2014

for i in {1..3}; 
do for j in 1 2; 
do cat 6692_S${i}_S${i}_*_R${j}_001.fastq.gz >  6692_S${i}_R${j}_concatenate.fastq.gz; 
done; 
done

# Мое пробное имя в качестве примера 6692_S1_S1_L001_R1_001.fastq.gz; 6692_S1_S1_L002_R1_001.fastq.gz

Я думаю, что вы можете адаптировать к вашим потребностям.

person Yang    schedule 02.02.2021
comment
Спасибо Бенуа! - person Yang; 02.02.2021