У меня есть папка, в которой есть куча файлов, и я хотел бы собрать отдельные файлы. Макет такой:
sample1_S99_L1_R1_001.fastq.gz
sample1_S99_L2_R1_001.fastq.gz
sample1_S99_L1_R2_001.fastq.gz
sample1_S99_L2_R2_001.fastq.gz
sample2_S88_L1_R1_001.fastq.gz
sample2_S88_L2_R1_001.fastq.gz
sample2_S88_L1_R2_001.fastq.gz
sample2_S88_L2_R2_001.fastq.gz
и так далее для разных образцов. Я хотел бы скопировать sample1_S99 _ * _ R1_001.fastq.gz в 1 файл gunzip. Таким образом, образцы, сгруппированные в приведенном выше коде, должны быть объединены.
Вручную я бы сделал что-то вроде этого:
cat sample1_S99_L1_R1_001.fastq.gz sample1_S99_L2_R1_001.fastq.gz > sample1.R1.fastq.gz
а также
cat sample1_S99_L1_R2_001.fastq.gz sample1_S99_L2_R2_001.fastq.gz > sample1.R2.fastq.gz
Моя идея заключалась в том, чтобы автоматизировать эту процедуру, и я придумал следующее:
ls | awk -F '[_.]' '{print $1}' > test.txt
sort -u test.txt > names_final.txt
while read line;do cat $line_*_*_R1_*.fastq.gz > $line.R1.fastq.gz;done < names_final.txt
while read line;do cat $line_*_*_R2_*.fastq.gz > $line.R2.fastq.gz;done < names_final.txt
Проблема, с которой я столкнулся сейчас, заключается в том, что эти команды, похоже, объединяют все файлы R1. Если я напечатаю, например
ls sample1_*_*_R1_*.fastq.gz
Я получаю только те файлы, которые хочу собрать вместе. Так что я не уверен, что здесь моя ошибка.
У кого-нибудь есть идея?
Заранее спасибо.
file_LX_001
были вместе, затемfile_LX_002
вместе и т. д.? Пример немного сбивает с толку - person fedorqui 'SO stop harming'   schedule 29.04.2016$line_*_*_R2_*.fastq.gz
это заменяет переменную$line_
на завершающий знак подчеркивания, а не$line
, как вы хотели. Подчеркивание является допустимым символом в идентификаторах (но дефис не будет, поэтому$line-*-*-R2-*.fastq.gz
будет работать, если в именах файлов используются дефисы вместо подчеркивания). Вам, вероятно, понадобится:${line}_*_*_R2_*.fastq.gz
, где фигурные скобки ограничивают имя переменной. - person Jonathan Leffler   schedule 29.04.2016