У меня эти файлы находятся в каталоге.
Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz
Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz
Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz
Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz
Я хочу, чтобы результат выглядел так.
Mabel-A10_L001_R1_001.fastq.gz
Mabel-A5_L001_R1_001.fastq.gz
Mabel-A11_L001_R1_001.fastq.gz
Mabel-A6_L001_R1_001.fastq.gz
решение1
Вы можете попробовать переименовать их как-то так:
for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done
решение2
Этот скрипт выведет команды оболочки, которые выполняют серию команд «mv» для выполнения вашей задачи:
for FILE in *.fastq.gz
do
L="${FILE%%_*}_"
R="${FILE#${L}*_}";
printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done
Запустите его один раз и проверьте вывод. Если файлов много, вы можете использовать less
для просмотра команд.
Если все в порядке, выполните команду еще раз и направьте вывод в bash
.
Он работает, устанавливая переменную L на все, что слева от первого подчеркивания в имени файла, плюс само подчеркивание. Затем он формирует строку R, удаляя строку в L из начала имени файла и удаляя далее до следующего подчеркивания.
mv -vi "Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz" "Mabel-A10_L001_R1_001.fastq.gz"
mv -vi "Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz" "Mabel-A11_L001_R1_001.fastq.gz"
mv -vi "Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz" "Mabel-A5_L001_R1_001.fastq.gz"
mv -vi "Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz" "Mabel-A6_L001_R1_001.fastq.gz"