Tengo estos archivos en un directorio.
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
Quiero que la salida se vea así.
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
Respuesta1
Puedes intentar algo como cambiarles el nombre:
for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done
Respuesta2
Este script generará comandos de shell que realizan una serie de comandos 'mv' para realizar su tarea:
for FILE in *.fastq.gz
do
L="${FILE%%_*}_"
R="${FILE#${L}*_}";
printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done
Ejecútelo una vez y examine el resultado. Si hay muchos archivos, es posible que desee utilizarlos less
para revisar los comandos.
Si todo se ve bien, ejecute el comando nuevamente y canalice la salida a bash
.
Funciona estableciendo la variable L en todo lo que queda del primer guión bajo en el nombre del archivo, más el guión bajo mismo. Luego forma una cadena R quitando la cadena en L del frente del nombre del archivo y quitándola hasta el siguiente guión bajo.
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"