переименование файла в bash из информационного файла

У меня есть каталог, в котором у меня есть 4 файла

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

Также у меня есть информационный файл для этих 4 файлов в файле sep с именем 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 

Я хочу изменить имя моих файлов в каталоге из файла info.txt, поэтому после смены имен моя директория должна выглядеть так:

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

Таким образом, в основном изменение ERR315336_1.fastq.gz to placenta_6c_ERR315336_1.fastq.gz и так далее. У меня есть огромный файл списка. Как я могу это сделать.

благодаря

AWK-ishly:

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

Баш-EDly:

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

Удалите эхо, когда оно выглядит хорошо.

Это не проверяет ошибки для пробелов в именах файлов или кавычек в именах файлов.

 $ 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 
  • Прочтите файл info.txt по info.txt и сохраните 3 поля (предполагается разделение пространства / вкладки)
  • echo для сухого пробега, удалите, как только все в порядке
  • Дальнейшее чтение: http://mywiki.wooledge.org/BashFAQ/001