renomeando o arquivo no bash de um arquivo info

0

Eu tenho um diretório em que tenho 4 arquivos

ERR315336_1.fastq.gz  ERR315336_2.fastq.gz  ERR315337_1.fastq.gz  ERR315337_2.fastq.gz

Também tenho o arquivo de informações para esses 4 arquivos em um arquivo sep chamado info.txt

placenta_6c      placenta_6c_ERR315336_1.fastq.gz    ERR315336_1.fastq.gz
placenta_6c      placenta_6c_ERR315336_2.fastq.gz    ERR315336_2.fastq.gz
thyroid_5b   thyroid_5b_ERR315337_1.fastq.gz     ERR315337_1.fastq.gz
thyroid_5b   thyroid_5b_ERR315337_2.fastq.gz     ERR315337_2.fastq.gz

Eu quero mudar o nome dos meus arquivos no diretório do arquivo info.txt, então depois de mudar os nomes, meu diretório deve ficar assim:

 placenta_6c_ERR315336_1.fastq.gz 
 placenta_6c_ERR315336_2.fastq.gz 
 thyroid_5b_ERR315337_1.fastq.gz 
 thyroid_5b_ERR315337_2.fastq.gz

Então, basicamente, alterando ERR315336_1.fastq.gz to placenta_6c_ERR315336_1.fastq.gz e assim por diante. Eu tenho um enorme arquivo de lista de informações. Como posso fazer isso?

Obrigado

    
por user3138373 16.05.2017 / 18:23

2 respostas

2

awk-ishly:

cd directory-with-files
awk '{system("echo mv " $3 " " $2)}' < /path/to/info.txt

bash-edly:

cd directory-with-files
while read -r junk new old
do
  echo mv "$old" "$new"
done < /path/to/info.txt

Remova o eco quando estiver com boa aparência.

Isso não faz nenhuma verificação de erros para espaços nos nomes de arquivos, ou para aspas nos nomes de arquivos.

    
por 16.05.2017 / 18:32
2
$ while read -r c1 c2 c3; do echo mv "$c3" "$c2"; done < info.txt
mv ERR315336_1.fastq.gz placenta_6c_ERR315336_1.fastq.gz
mv ERR315336_2.fastq.gz placenta_6c_ERR315336_2.fastq.gz
mv ERR315337_1.fastq.gz thyroid_5b_ERR315337_1.fastq.gz
mv ERR315337_2.fastq.gz thyroid_5b_ERR315337_2.fastq.gz
  • Leia o arquivo info.txt linha por linha e salve os 3 campos (assume a separação de espaço / tabulação)
  • echo é para execução a seco, remova quando estiver ok
  • Outras leituras: link
por 16.05.2017 / 18:32

Tags