Remover string do nome do arquivo para deixar variável?

1

Eu tenho a seguinte lista de arquivos:

Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.alleles.tsv
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.matches.tsv
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.snps.tsv
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.tags.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.alleles.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.matches.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.snps.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.tags.tsv

Eu gostaria de eliminar algumas das sequências repetitivas e renomear o arquivo da seguinte forma:

A5201_tdim.alleles.tsv
A5201_tdim.matches.tsv
A5201_tdim.snps.tsv

Eu tentei usar:

mv Dorn_Triatomine_*_sequence_1_unmappedforTdim_tdim.tags.tsv *_tdim.tags.tsv 

Qual seria a maneira mais simples de realizar essa tarefa?

    
por Lucia O 12.05.2015 / 23:38

2 respostas

2

Este script deve fazê-lo:

#!/bin/sh
for f in Dorn_Triatom* ; do
  mv "$f" 'echo "$f" | sed -e 's/Dorn_Triatomine_//' -e 's/sequence_1_unmappedforTdim_//''
done
    
por 12.05.2015 / 23:46
0

Usando grep com o PCRE para obter o novo nome de arquivo:

#!/bin/bash
for file in *.tsv; do
  newname="$(grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file")$(grep -Po '.*_\K.*$' <<<"$file")"
  mv "$file" "$newname"
done 

newname é combinado de saída de duas operações grep :

  • grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file" produzirá as A5201_ como sequências de caracteres de cada nome de arquivo

  • $(grep -Po '.*_\K.*$' <<<"$file") corresponderá à última parte do nome do arquivo, depois da última _

  • $() é o padrão de substituição do comando bash .

por 13.05.2015 / 00:01