Eu tenho esses arquivos em um diretório.
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
Quero que a saída fique assim.
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
Responder1
Você pode tentar algo como renomeá-los:
for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done
Responder2
Este script gerará comandos shell que executam uma série de comandos 'mv' para realizar sua tarefa:
for FILE in *.fastq.gz
do
L="${FILE%%_*}_"
R="${FILE#${L}*_}";
printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done
Execute isso uma vez e examine a saída. Se houver muitos arquivos, você pode usar less
para revisar os comandos.
Se tudo estiver certo, execute o comando novamente e canalize a saída para bash
.
Funciona definindo a variável L para tudo o que resta do primeiro sublinhado no nome do arquivo, mais o próprio sublinhado. Em seguida, ele forma uma string R removendo a string em L da frente do nome do arquivo e removendo ainda mais para o próximo sublinhado.
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"