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