Цикл для объединения нескольких пар файлов с почти одинаковыми именами в 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

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

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

2 ответа

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

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

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

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

      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

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

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