Переименуйте файлы генома FASTA с частью заголовка последовательности - PullRequest
0 голосов
/ 01 ноября 2018

Я хотел бы переименовать файлы FASTA с именем организма (хранится в файле) и идентификатором (часть имени файла).

Все файлы имеют одинаковый формат в имени файла и сохраненных данных, каждый файл имеет только один заголовок FASTA и соответствующую последовательность.

Исходное имя файла:

$ head GCF_000008205.1_ASM820v1_genomic.fna

>NC_007295.1 Mycoplasma hyopneumoniae J, complete genome
CCAAAATCAACTTTATTAAATGTGCTAAATAAAGTTGATAAAATGTTTGCAAAAACATTTTTGTTGTTTTAAACAAAACA
AATTGATTTAAAAATTATACTACAAAATTAAAGGAAAATTTATAAAATGCAAACAAATAAAAATAATTTAAAGGTTAGAA
CACAGCAAATTAGACAACAAATTGAAAATTTATTAAATGATCGAATGTTGTATAACAACTTTTTTAGCACAATTTATGTA
...

Я бы хотел переименовать только имя файла, используя идентификатор сборки (GCF_000008205.1) в имени файла, а также второе и третье слова заголовка FASTA (Mycoplasma hyopneumoniae):

Mycoplasma_hyopneumoniae_GCF_000008205.1.fna

Я пробовал это:

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

результат:

Mycoplasma_hyopneumoniae_NC_007295.1.fna

Но результат показывает код перед именем организма вместо идентификатора, который меня интересует, который находится в имени исходного файла.

Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Следующая идея работает, но только если каждый отдельный файл отформатирован, как в вашем примере. В каталоге, в котором находятся все ваши файлы, выполните следующие действия:

for i in $(ls)
do
  name1=$(cat "$i" | grep \> | awk -v OFS='_' '{print $2,$3,_}')
  name2=$(basename "$i" | cut -d_ -f 1,2 | sed 's/$/.fna/g')
  mv "$i" "${name1}${name2}"
done

Я предлагаю сначала создать резервную копию папки, прежде чем пробовать ее на тот случай, если у вас есть файлы, отформатированные по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...