Вы можете попробовать использовать цикл, чтобы извлечь важную часть файла:
for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); echo $newname; done
Это просто даст вам новый список имен файлов. Вы можете перемещать их:
for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); mv $file $newname; done
Чтобы разорвать этот вниз немного:
- петли над * .gz файлами
- создать переменную, которая удаляет ненужное содержание от имени
- переместите имя файла на это новое имя
Я ожидаю, что есть лучшие способы сделать это, но это то, что я придумал с верхней части моей головы.
Тест:
$ ls
40_END_251_GTGAAA_L002_R1_001.fastq.gz 40_END_251_GTGAAA_L002_R2_001.fastq.gz 5_END_1033_ACAGTG_L002_R1_001.fastq.gz 5_END_1033_ACAGTG_L002_R2_001.fastq.gz
$ for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); echo $newname; done
./40_END_251_R1.fastq.gz
./40_END_251_R2.fastq.gz
./5_END_1033_R1.fastq.gz
./5_END_1033_R2.fastq.gz
$ for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); mv $file $newname; done
$ ls
40_END_251_R1.fastq.gz 40_END_251_R2.fastq.gz 5_END_1033_R1.fastq.gz 5_END_1033_R2.fastq.gz
Примечание Я делаю это в Баш 4.4.5
EDIT Учитывая, что я не совсем уверен, какие столбцы в имени являются наиболее важными , awk
может работать лучше:
for file in ./*.gz; do newname=$(echo $file | awk -F'_' '{print $2 "_" $3 "_" $6}' -); echo $newname; done
Это будет расколоть имя файла с помощью _
и позволяют ссылаться на столбцы, которые вы хотите с помощью $X
:
for file in ./*.gz; do newname=$(echo $file | awk -F'_' '{print $2 "_" $3 "_" $6}' -); mv $file "${newname}.fastq.gz"; done
Спасибо большое :) – Kisun
я просто понял, что это не работает во всех ситуациях, как: 17_END_107A_CGATGT_L005_R1_001.fastq. gz и 29_END_4271A_ACAGTG_L008_R1_001.fastq.gz. Кроме того, я бы предпочел вывести цифры и сначала «_» i.e 40_, 5_ и т. Д. – Kisun
Позвольте мне посмотреть, смогу ли я его настроить :) – bedwyr