Question Comment supprimer un nombre ou une lettre en particulier avant un symbole (|) en utilisant la commande grep


J'ai un nombre N de séquence dans un fichier comme celui-ci

>668|CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

>669|CAX10447 conserved protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

ou comme ça

>gi|76167242|gb|AAX50250.1| hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

Maintenant, j'ai besoin d'un grep commande pour supprimer un mot ou un numéro particulier sur la première ligne.

La sortie devrait être:

>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

ou

>AAX50250.1| hypothetical protein CTA_0001 [Chlamydia trachomatis A/HAR-13]
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRAAESRS
SSRTARGASSGYREYSPSAAR

J'ai besoin d'une commande grep pour faire cette action, j'ai utilisé sed mais il a supprimé la première ligne, l'ID, il est donc difficile d'identifier quelle séquence est laquelle.


0
2018-06-28 11:09


origine


Non, vous ne voulez pas grep, c'est le mauvais outil pour le travail. grep ne peut pas modifier vos fichiers. S'il vous plaît modifier votre question et expliquez quelle partie de la ligne d'identification vous avez besoin de supprimer. Voulez-vous tout supprimer avant le dernier |? Comment pouvons-nous savoir quoi supprimer? - terdon♦
Salut à tous, Merci .. Je veux juste supprimer le caractère avant "|". Je viens juste de faire le point. J'ai utilisé "sed". Il m'a donné une bonne sortie .. merci - Nitha
Cela ne vous donnera pas le bon résultat pour votre deuxième exemple. Il ne laissera que la «protéine hypothétique CTA_0001». - terdon♦


Réponses:


On dirait que vous voulez tout supprimer avant le dernier | personnage. Cependant, votre deuxième exemple a un | après l'ID et avant le hypothetical protein. Vraisemblablement, dans ce cas, vous voulez tout supprimer avant le dernier | cela n'est pas suivi par un espace.

Voici un moyen:

$ sed 's/| / /; s/^[^ ]*|/>/' file.pep 
>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
>AAX50250.1 hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

le s/| / /; enlève tout | suivi d'un espace. Cela supprimera le | de AAX50250.1|. le s/^[^ ]*|/>/ cherche un > au début de la ligne (^>) et supprime la plus longue chaîne de non-espace ([^ ]) caractères jusqu'au dernier | sur la ligne.


2
2018-06-28 11:34



Merci beaucoup!!! c'était de l'aide complète. J'ai utilisé sed /^.* | AAX / | AAX / 'CHT_A.fasta> B.txt - Nitha
@Nitha, vous êtes les bienvenus. Si cette réponse a résolu votre problème, veuillez prendre un moment et accepte-le en cliquant sur la coche à gauche. Cela marquera la question comme une réponse et est la façon dont les remerciements sont exprimés sur les sites Stack Exchange. - terdon♦
@ Terdon..yes votre commande a parfaitement fonctionné! J'ai fait - Nitha


Si vous voulez faire cela avec grep. Vous devriez lire 3 lignes après chaque ligne vide et les copier dans la variable. Vous devriez couper la dernière partie de la variable.

L'analyseur fera l'affaire;

Premier reverse chaîne

Seconde cut chaîne avec | et obtenez le premier

Troisième reverse chaîne

echo $yourstring |rev |cut -d'|' -f1|rev

BTW ce ne sera pas supprimer, ne vous montre que la partie. Si vous souhaitez enregistrer la sortie, redirigez-la vers le fichier.

echo $yourstring |rev |cut -d'|' -f1|rev > yournewfile

0
2018-06-28 11:48



Merci Terdon! votre commande a fonctionné parfaitement sed 's / | / /; s / ^ [^] * | /> / '. et merci Yavuzs de m'aider à utiliser grep, je vais essayer .. - Nitha