FORUMCategory: BioinformaticsRenaming of Fasta headers
Genevieve asked 11 months ago



  • I’m new in the Bioinformatic world so sorry for my question. I’m using Galaxy to analyse my Illumina data.
    My question is does everyone know if there are tools available in Galaxy or Use-Galaxy to rename the header of each fasta read because after that I want to bin all my fasta files into a single file (in order to have a uniform OTU nomenclature).
    Thank

    Pascale Marquis Staff replied 11 months ago

    Hi Genevieve, I am seeing (Rename sequences), under tools: NGS: QC and manipulation.

    Genevieve replied 11 months ago

    Yes I tried but I cannot change my FASTA sequence headers with the sample name

    2 Answers
    Best Answer
    Eloi Mercier Staff answered 11 months ago



  • The approved solution was to use this command line in the Windows command line (cmd.exe) after downloading seqkit from https://github.com/shenwei356/seqkit/releases/tag/v0.8.0

     FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f.{nr} %f > renamed_%f

    to obtain headers containing the name of the file and a incremental number such as
    >301.fasta.1
    ACGT
    >301.fasta.2
    Eloi

    Eloi Mercier Staff answered 11 months ago



  • Hi Genevieve,

    I would not recommend using Galaxy for anything remotely advanced. As you can see, Galaxy doesn’t allow to deviate from standard analyses.
    To do what you want, you will need to leave Galaxy and use other available tools depending of your system. This might take a bit of effort but it is worth it, especially if you want to do more bioinformatics later!
    I will try to guide you through this. You can also request a 1on1 session if you prefer.
    First, I would need to know what type of system are you on (Windows, Linux or Macs)?
    Eloi
     

    Genevieve replied 11 months ago

    I know i’m a bit limited with Galaxy.
    I’m with windows

    Eloi Mercier Staff replied 11 months ago

    OK. You will need to download Seqkit to start with. You can download it from here: https://github.com/shenwei356/seqkit/releases/tag/v0.8.0
    Download the seqkit_windows_amd64.exe.tar.gz if you have a 64b version of Windows, or seqkit_windows_386.exe.tar.gz if you are not sure.
    Then unzip it with Winrar or 7zip for instance and install it.

    Genevieve replied 11 months ago

    Ok done

    Eloi Mercier Staff replied 11 months ago

    Great. You should have a file called seqkit.exe. Let me know if this is not the case.
    Copy this file into the same folder than your fasta files. This is not mandatory but this will make it easier.

    Now, click on the Windows icon (bottom left) and search for cmd.exe and run it. This is the command line tool from Windows. We will work in this terminal from now on. You can learn more about it if you want to: https://www.makeuseof.com/tag/a-beginners-guide-to-the-windows-command-line/

    The only command you should know for now is the “cd” command that allow you to change the directory (you can see you current directory at the beginning of each line in the terminal). You should be able to move to the directory where your fasta file and the seqkit.exe tool is. For instance “cd Document/myproject/myfasta”

    Once you’re here let me know.

    Genevieve replied 11 months ago

    Ok
    Microsoft Windows [version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. Tous droits r▒serv▒s.

    C:\Users\Genevieve\Documents\Fasta.file>seqkit.exe
    seqkit.exe
    SeqKit — a cross-platform and ultrafast toolkit for FASTA/Q file manipulation

    Version: 0.8.0

    Eloi Mercier Staff replied 11 months ago

    Perfect!

    Now the fun part. This how to change the fasta file header. Type the following the command line:
    seqkit.exe replace -p “(.*)” -r “FILENAME.$1” my_fasta.fa > my_new_fasta.fa

    I will explain later what this does.
    Look at the new fasta file. The fasta headers should now contain FILENAME at the begining. Did it work?

    PS: I see you have Windows in French. We can continue in French if you prefer.

    Genevieve replied 11 months ago

    Bonjour,
    non sa ne fonctionne pas voici ce que j’obtiens
    C:\Users\Genevieve\Documents\Fasta.file>seqkit.exe replace -p “(.*)” -r “FILENAME.$1” my_fasta.fa > my_new_fasta.fa
    seqkit.exe replace -p “(.*)” -r “FILENAME.$1” my_fasta.fa > my_new_fasta.fa
    [ERRO] fastx: open my_fasta.fa: Le fichier spécifié est introuvable.

    J’ai remplacé le my_fasta par le nom de mon fichier
    C:\Users\Genevieve\Documents\Fasta.file>seqkit.exe replace -p “(.*)” -r “FILENAME.$1” 6584.fa > 6584_new_fasta.fa
    seqkit.exe replace -p “(.*)” -r “FILENAME.$1” 6584.fa > 6584_new_fasta.fa
    [ERRO] fastx: open 6584.fa: Le fichier spécifié est introuvable.

    et j’ai encore le même code d’erreur

    Eloi Mercier Staff replied 11 months ago

    C’est que le fichier n’est pas dans ce répertoire. Voiez-vous votre fichier dans la liste quand tu tapes “dir” dans le terminal? S’il est dans un autre répertoire, vous pouvez utiliser “sous_dossier_fasta/mon_fichier_fasta.fa” ou “../un_autre_dossier/mon_fichier_fasta.fa” (où “..” fait remonter au répertoire parent).

    Je vais bientôt partir du bureau. Si vous arrivez à régler ce problème, voici la suite.

    Il est préférable d’enlever ou de déplacer les fichiers qui n’ont pas à être modifier (par exemple 6584_new_fasta.fa créé plus haut). Cela évite qu’ils ne soient modifier deux fois.

    Dans le terminal, tapez
    FOR %f IN (*fasta) DO seqkit.exe replace -p “(.*)” -r “%f.$1” %f > renamed_%f
    Vous devriez avoir une liste de fichiers commenant par “renamed_” avec les en-tête des fichiers fasta contenant le nom du fichier originel.

    Je vous répondrai demain si vous avez encore des soucis.

    Eloi

    Genevieve replied 11 months ago

    J’ai rentré ceci et cela semble avoir fonctionné. J’ai mis 6584.fasta au lieu de 6584.fa

    C:\Users\Genevieve\Documents\Fasta.file>seqkit.exe replace -p “(.*)” -r “FILENAME.$1” 6584.fasta > 6584_new_fasta.fa
    seqkit.exe replace -p “(.*)” -r “FILENAME.$1” 6584.fasta > 6584_new_fasta.fa

    J’ai regardé le nouveau fichier (6584_new_fasta.fa) et il n’y pas le mot FILENAME au début des séquences
    >M03992:221:000000000-BGWB9:1:2107:6935:2897
    AACGCACATTGCGCCCGCTGGTATTCCGGCGGGCATGCCTGTTCGAGCGTCATTATGACC
    AATCAAGCTCTGCTTGGCTTTGGGGCCCGCTATACCGGCGGCTCTTAAAATCAGTGGCGG
    TGCCGTCTGGCTCTAAGCGTAGTAATACTTCTCGCTACAGGGTCCAGTCGTTCACCCGCC
    AGAACCCCCAACTTTCTTAGGTTGACCTCGGATCAGGTAGGGATACCCGCTGAACTTAA

    Eloi Mercier Staff replied 11 months ago

    Je ne vois pas de problème à votre ligne de commande. Essayez voir ça pour tester:
    seqkit.exe replace -p “(.*)” -r “FILENAME” 6584.fasta > 6584_new_fasta.fa
    Les lignes devraient toutes contenir FILENAME (et uniquement ça).

    Genevieve replied 11 months ago

    Parfait je vais attendre votre réponse demain

    Genevieve replied 11 months ago

    Non encore le même problème. Il n’y a pas le mot FILENAME dans le nouveau fichier
    C:\Users\Genevieve\Documents\Fasta.file>seqkit.exe replace -p “(.*)” -r “FILENAME” 6584.fasta > 6584_new_fasta.fa
    seqkit.exe replace -p “(.*)” -r “FILENAME” 6584.fasta > 6584_new_fasta.fa

    >M03992:221:000000000-BGWB9:1:2107:6935:2897
    AACGCACATTGCGCCCGCTGGTATTCCGGCGGGCATGCCTGTTCGAGCGTCATTATGACC
    AATCAAGCTCTGCTTGGCTTTGGGGCCCGCTATACCGGCGGCTCTTAAAATCAGTGGCGG
    TGCCGTCTGGCTCTAAGCGTAGTAATACTTCTCGCTACAGGGTCCAGTCGTTCACCCGCC
    AGAACCCCCAACTTTCTTAGGTTGACCTCGGATCAGGTAGGGATACCCGCTGAACTTAA

    Je vais attendre votre réponse demain
    un gros merci de m’aider

    Eloi Mercier Staff replied 11 months ago

    C’est étonnant.
    Essayez sans les guillemets pour voir.
    seqkit.exe replace -p (.*) -r FILENAME 6584.fasta > 6584_new_fasta.fa

    Êtes-vous à Montréal? Si oui, vous pouvez passer me voir à mon bureau à McGilll.

    Genevieve replied 11 months ago

    Wow sa fonctionne. Voici ce que j’obtiens
    >FILENAME
    AACGCACATTGCGCCCGCTGGTATTCCGGCGGGCATGCCTGTTCGAGCGTCATTATGACC
    AATCAAGCTCTGCTTGGCTTTGGGGCCCGCTATACCGGCGGCTCTTAAAATCAGTGGCGG
    TGCCGTCTGGCTCTAAGCGTAGTAATACTTCTCGCTACAGGGTCCAGTCGTTCACCCGCC
    AGAACCCCCAACTTTCTTAGGTTGACCTCGGATCAGGTAGGGATACCCGCTGAACTTAA

    Genevieve replied 11 months ago

    Non je suis à Trois-Rivières

    Genevieve replied 11 months ago

    J’ai plusieurs fichier Fasta. Dois-je faire ceci pour chaque (un à un ) ?

    Eloi Mercier Staff replied 11 months ago

    Vous pouvez le faire un à un avec:
    seqkit.exe replace -p (.*) -r FILENAME.$1 6584.fasta > 6584_new_fasta.fa

    Ou bien faire ça automatiquement:
    FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f.$1 %f > renamed_%f

    Notez que cela va appliquer le changement à tout les fichiers fasta présent dans le répertoire. Il se peut que certains fichiers soient transformer deux fois de suite. Ce n’est pas très grave, vous pouvez supprimer (ou ignorer) les fichiers “renamed_renamed_” après avoir lancer ce script.

    Pour votre information, voici comment cela fonctionne:
    1. le script va chercher tout les fichiers se terminant par fasta: (*fasta)
    2. il va appliquer le code situé après “DO” à chacun de ces fichiers, un à un, en remplaçant %f par le nom du fichier.
    3. seqkit va chercher le header contenant n’importe quel character et de n’importe quelle longueur. C’est le -p (.*). Il va enregistrer cette information dans la variable $1.
    4. Puis il va remplacer cela par %f.$1. C’est à dire, le nom du fichier (%f) et le header ($1).

    Eloi

    Genevieve replied 11 months ago

    Un gros merci. Je vais essayer cela au courant de l’avant-midi.

    Genevieve replied 11 months ago

    Bonjour, encore moi

    j’ai essayé votre deuxième script FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f.$1 %f > renamed_%f
    et l’identifiant est effectivement là, mais avec le reste des codes aussi.
    >301.fasta.M03992:221:000000000-BGWB9:1:2107:24220:3604
    AACGCACCTTGCGCTCCCTGGTATTCCGGGGAGCACGCCTGTTCGAGTGTCGTGAAATTT
    CTCAAGCTTGGATGGCCTTTTTGTCTGTCCTTAGCCTTGGTTGTTGGGCTTTGCCGTGTC
    CTTTATTGGGACGGCTGGCCTTAAAAGCATTAGCTGATCCTTGTGCGGCGCTGGTTCTAC
    TCAGCGTGATAATAGTCTGATCGCTGAGGACATCTTTTGGGATGGCCAGTCCTCATTTGG
    GTTGCTTATAGACCTGGTCTTGCAGATTGTTCAATCTGTGGGCTCCACTTTTCAGCTTTG
    ACCTCGAATCAGGTGGGACTACCCGCTGAACTTAA

    Genevieve replied 11 months ago

    Je voudrais seulement avoir le 301

    Eloi Mercier Staff replied 11 months ago

    Après avoir convertit les headers avec la fonction précédente, utilisez cette fonction:

    FOR %f IN (renamed.*fasta) DO powershell -Command “(gc %f) -replace ‘.fasta’, ” | Out-file clean.%f”

    Notez que l’on atteint ici les limites de ce que l’on peut faire sous Windows. Si vous souhaitez aller plus loin, je vous conseille vivement d’utiliser Linux.

     

    edit: j’ai peut-être mal compris. Souhaitez vous seulement avoir “301” pour tout les headers, sans les headers initiaux?
    C’est à dire:

    >301
    ACGTACGT
    >301
    GTCAGTAC

     

    Genevieve replied 11 months ago

    D’accord j’en suis bien consciente.

    J’ai essayé ce que vous m’avez envoyé et j’obtiens le même résultat
    >301.fasta.M03992:221:000000000-BGWB9:1:2107:24220:3604
    AACGCACCTTGCGCTCCCTGGTATTCCGGGGAGCACGCCTGTTCGAGTGTCGTGAAATTT
    CTCAAGCTTGGATGGCCTTTTTGTCTGTCCTTAGCCTTGGTTGTTGGGCTTTGCCGTGTC
    CTTTATTGGGACGGCTGGCCTTAAAAGCATTAGCTGATCCTTGTGCGGCGCTGGTTCTAC
    TCAGCGTGATAATAGTCTGATCGCTGAGGACATCTTTTGGGATGGCCAGTCCTCATTTGG
    GTTGCTTATAGACCTGGTCTTGCAGATTGTTCAATCTGTGGGCTCCACTTTTCAGCTTTG
    ACCTCGAATCAGGTGGGACTACCCGCTGAACTTAA

    Sinon je vais le faire un à un pour avoir seulement l’identifiant au début (301)

    Eloi Mercier Staff replied 11 months ago

    Vous regardez bien les fichiers commençant par “clean”?

    Il est vrai que le plus simple est peut-être de changer la header dans le script pour chaque fichier. Laissez-moi savoir si cela a marché.

    Eloi

    Genevieve replied 11 months ago

    Oui je souhaite seulement avoir “301” pour tout les headers, sans les headers initiaux.

    En lançant le script FOR %f IN (renamed.*fasta) DO powershell -Command “(gc %f) -replace ‘.fasta’, ” | Out-file clean.%f”, j’ai aucun dossier ”Clean” qui est créé

    Genevieve replied 11 months ago

    edit: j’ai peut-être mal compris. Souhaitez vous seulement avoir “301” pour tout les headers, sans les headers initiaux?
    C’est à dire:

    >301
    ACGTACGT
    >301
    GTCAGTAC

    Oui c’est exactement ce que je veux

    Eloi Mercier Staff replied 11 months ago

    Ah, je pense voir le problème.

    Après ‘fasta’, il s’agit de deux simple appostrophes ‘ sans espace.
    Avant (gc %f) et après clean.$f, il s’agit de guillemets “.

    Si cela ne marche toujours pas, reprenez le code du début et lancer le pour chaque fichier:
    seqkit.exe replace -p (.*) -r 301 310.fasta > renamed_310.fasta
    Et remplacez 310 par le numero du fichier.
    Notez que j’ai enlevé le $1 pour n’avoir que “301” comme header.

    Eloi Mercier Staff replied 11 months ago

    Notez qu’il faudrait relancer le premier script pour n’avoir que le nom du fichier.
    1. FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f %f > renamed_%f (sans le $1)
    Ce qui devrait donner:
    renamed_301.fasta
    >301.fasta
    ACGTACGT

    2. FOR %f IN (renamed.*fasta) DO powershell -Command “(gc %f) -replace ‘.fasta’, ” | Out-file clean.%f”
    Ce qui devrait donner:
    clean.renamed_301.fasta
    >301
    ACGTACGT

    Autrement, manuellement:
    seqkit.exe replace -p (.*) -r 301 310.fasta > renamed_310.fasta
    seqkit.exe replace -p (.*) -r 6584 6584.fasta > renamed_6584.fasta
    etc.

    Genevieve replied 11 months ago

    Non sa ne fonctionne pas

    Petite question quand on a lancé cette commande FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f.$1 %f > renamed_%f tout mes fichiers se sont renommé mais avec tous ces détails >301.fasta.M03992:221:000000000-BGWB9:1:2107:24220:3604. Est-il possible de simplement avoir seulement le ID (301)

    Eloi Mercier Staff replied 11 months ago

    FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f %f > renamed_%f (sans le $1)
    renomme les headers par le nom du fichier. Donc 301.fasta.
    Enlever le “.fasta” est plus compliqué et c’est ce que l’autre fonction est censé faire.

    Le plus simple est sans doute de traiter les fichiers individuellement avec:
    seqkit.exe replace -p (.*) -r 301 310.fasta > renamed_310.fasta
    seqkit.exe replace -p (.*) -r 6584 6584.fasta > renamed_6584.fasta
    seqkit.exe replace -p (.*) -r NEW_HEADER 6584.fasta > renamed_6584.fasta
    etc.

    Genevieve replied 11 months ago

    La 2e étape ne fonctionne pas je n’obtiens pas de fichier clean.rename
    Au pire c’est déja bon d’avoir seulement 301.fasta au début de mes séquences 🙂
    Une autre petite chose que je viens de penser serait-il mieux qu’après mon identifiant d’échantillon il y a un identifiant de séquences ?
    Ex :
    >301.fasta.1
    ACGTACGT
    >301.fasta.2
    GTCAGTAC
    etc…

    Eloi Mercier Staff replied 11 months ago

    On y est presque!

    Cela devrait faire l’affaire:
    FOR %f IN (*fasta) DO seqkit.exe replace -p (.*) -r %f.{nr} %f > renamed_%f

    Genevieve replied 11 months ago

    C’est parfait 🙂
    >301.fasta.1
    AACGCACCTTGCGCTCCCTGGTATTCCGGGGAGCACGCCTGTTCGAGTGTCGTGAAATTT
    CTCAAGCTTGGATGGCCTTTTTGTCTGTCCTTAGCCTTGGTTGTTGGGCTTTGCCGTGTC
    CTTTATTGGGACGGCTGGCCTTAAAAGCATTAGCTGATCCTTGTGCGGCGCTGGTTCTAC
    TCAGCGTGATAATAGTCTGATCGCTGAGGACATCTTTTGGGATGGCCAGTCCTCATTTGG
    GTTGCTTATAGACCTGGTCTTGCAGATTGTTCAATCTGTGGGCTCCACTTTTCAGCTTTG
    ACCTCGAATCAGGTGGGACTACCCGCTGAACTTAA
    >301.fasta.2
    AACGCACCTTGCGCCCCTTGGTATTCCGAGGGGCACACCCGTTTGAGTGTCGTGAAAATC
    TCAACCTCCTCGGTTTCTTTTGGGATGCTGAAGGAGGCTTGGACTTTGGAGGGCTTTGCT
    GGACTTGAAAGGCCAGCTCCTCTCAAATGAATTAGCGAGGTTCCCTTTGCCGATCCTCGA
    CGTGTGATAAGATGCTTCCACGTCTTGGTCTTTTGGCTCTGTCGCCTTTTGGGACCTGCT
    TCCAATTGTCTCTCGACGAGACAACGTTCGAGCACGTCTCGACCACGTACCCTTGACCTC
    AAATCGGGTGAGACTACCCGCTGAACTTAA

    Vraiment un gros merci. En personne je t’offrirais une bière

    Eloi Mercier Staff replied 11 months ago

    Super. Heureux d’avoir pu aider.