2016-10-26 4 views
0

Я хотел бы переименовать некоторые файлы генома FASTA, используя некоторую информацию первой строки, но я не могу понять это.Переименуйте файлы FASTA с частью их первой строки

Вот пример, два файла:

GCA_000007365.1_ASM736v1_genomic.fna:

>AE013218.1 Buchnera aphidicola str. Sg (Schizaphis graminum), complete genome 
ATGTCAAAGTCGTATTTAAAAAATTTTGATGTTATTGTTATTGGTGGAGGGCATGCTGGCACTGAAGCTGCAGCAGCCTC 
TGCAAGAGTAGGTTGTAAAACATTATTATTAACTCAAAAAATAACTGATATAGGTGTATTATCTTGCAATCCTGCTATCG 

GCA_000012065.2_ASM1206v2_genomic.fna:

>CP000048.1 Borrelia hermsii DAH, complete genome 
TACCACTACACTTATTAATAATACATACTCACGCCTGGGGGGAAAAATTCAATAATGGAAACCTTACAAATATAAAACCA 
CTACAAATAGGTATTATTCAGCATAATTATATAAATTTAACTCCTTATAATCAACATTATAAATATTACGCTTTCATTGG 

Я хотел бы переименовать тысячу *.fna файлов с информацией о первой линии в файле FASTA, давая:

Buchnera_aphidicola_AE013218.1.fna 
Borrelia_hermsii_CP000048.1.fna 

Заголовок FASTA остается без изменений. Просто имя файла.

+0

Что _exactly_ переходит в имя файла? Первые три слова в порядке 2, 3, 1 без '>', связанных с подчеркиваниями? Что-то другое? –

+0

Точно @BenjaminW. слова 2, 3, 1 разделены «_» (2_3_1) без «>» и ничего больше. – Tetraodienne

ответ

1

Вы можете перебираем все .fna файлы, извлекать слова, переставлять их с AWK и поместить их в mv команду:

for fname in *.fna; do 
    mv -- "$fname" \ 
    "$(awk 'NR==1{printf("%s_%s_%s\n",$2,$3,substr($1,2));exit}' "$fname")".fna 
done 

Добавление echo перед командой mv, чтобы увидеть его выходные результаты

mv -- GCA_000007365.1_ASM736v1_genomic.fna Buchnera_aphidicola_AE013218.1.fna 
mv -- GCA_000012065.2_ASM1206v2_genomic.fna Borrelia_hermsii_CP000048.1.fna 

--, чтобы убедиться, что имена файлов, начинающиеся с дефиса не интерпретируются как опции для mv.

Вот что команда AWK в подстановки команд делает, более разборчивыми:

NR == 1 { 
    printf("%s_%s_%s\n", $2, $3, substr($1, 2)) 
    exit 
} 

Строка форматирования для printf перестраивает первые три слова; substr удалить первое > с первого слова. exit предотвращает обработку остальной части файла; это не изменит результат, а замедлит работу.


Более портативный будет mv "./$fname" "./$(...)"; -- - это GNUism, насколько я знаю.

+0

Так идеально! Спасибо! – Tetraodienne

+0

Hi снова @BenjaminW. проблема в том, что $ 2 идет с белым пространством у самого begginin (пытается вставить его правильно) '' Buchnera_aphidicola_AE013218.1.fna'' – Tetraodienne

+0

@Tetraodienne Вы добавили кавычки правильно? Это может произойти, если вы ввели '' $ (awk ...) ". Fna' вместо' '$ (awk ...)". Fna', но я не вижу, как иначе. Полученное имя файла начинается с пробела, верно? –

 Смежные вопросы

  • Нет связанных вопросов^_^