Это должен быть основной вопрос для многих людей, но я биолог, не имеющий программирования, поэтому, пожалуйста, извините мой вопрос.пакетное переименование файлов с выражениями perl
То, что я пытаюсь сделать, это переименовать около 100 000 gzipped файлов данных, которые имеют существующее имя кода (пример: XG453834.fasta.gz). Я бы хотел назвать их легко читаемыми и анализируемыми мной (пример: Xanthomonas_galactus_str_453.fasta.gz).
Я попытался использовать sed
, rename
и mmv
, но напрасно. Если я использую любую из этих команд в однократном скрипте, они работают нормально, просто я пытаюсь включить переменные в сценарий оболочки, столкнувшись с проблемами. Я не получаю никаких ошибок, просто имена не изменены, поэтому я подозреваю, что это ошибка ввода-вывода.
Вот что мои файлы выглядеть следующим образом:
#! /bin/bash
# change a bunch of file names
file=names.txt
while IFS=' ' read -r r1 r2;
do
mmv ''$r1'.fasta.gz' ''$r2'.fasta.gz'
# or I tried many versions of: sed -i 's/"$r1"/"$r2"/' *.gz
# and I tried many versions of: rename -i 's/$r1/$r2/' *.gz
done < "$file"
... и вот первые строки моего текстовый файл с одним пробелом разделителем:
cat names.txt
#find #replace
code1 name1
code2 name2
code3 name3
Я знаю, что могу сделать это с питоном или perl, но поскольку я застрял здесь, работая над этим конкретным скриптом, я хочу найти простое решение для исправления этого сценария bash и выяснить, что я делаю неправильно. Большое спасибо за любую помощь.
Кроме того, я попробовал cat
файл имен (см. Комментарий от Ashoka Lella ниже), а затем используйте awk
для перемещения/переименования. Некоторые из файлов имеют имена переменных (но всегда начинаются с кода), поэтому я ищу найти вариант замены &, чтобы просто заменить «код» на «имя» и сохранить структуру имени файла.
Я подозреваю, что я не избегаю переменной в пределах одного тика выражения perl, но я наполнил множество руководств, и я не могу найти способ сделать это.
Все ответы будут рассмотрены на примерах, которые вы предоставили. Если ваши имена на самом деле более сложны (т. Е. Содержат пробелы/специальные символы, тогда вы должны отредактировать свой вопрос, чтобы показать некоторые примеры, которые лучше отражают ситуацию. Если вам требуется более сложная логика (условное переименование, сопоставление образцов и т. Д.), Тогда вы должны сделать это ясно, показывая некоторые примеры желаемого поведения в вопросе. –
Спасибо за вашу помощь Том, я действительно ценю это. Похоже, что большинство моих проблем связаны с несоответствующими «кодами», которые, по-видимому, в нескольких тысячах файлов данных это менее прямой ответ. Вероятно, я попытаюсь обратиться к этому сценарию с помощью скрипта python, но я надеялся на что-то более простое. Еще раз спасибо за то, что помогли мне узнать лучший способ сделать это! –