J'ai un fichier dans lequel les données ressemblent à: Je veux extraire les valeurs de "alphabet d'acide aminé" et de "longueur de séquence dans un fichier de sortie", et Il faut ressembler à: p> comme je suis nouveau à bash, tout ce que je pourrais essayer jusqu'à présent est: p> Mais, je ne veux pas le mot "alphabet d'acide aminé" dans la sortie. Je veux seulement les valeurs de "Alphabet Amino Acid" et "Longueur de séquence" comme deux colonnes. P> Puis-je obtenir de l'aide de quoi faire? Merci d'avance. P> p>
4 Réponses :
En supposant que les deux champs existent pour tous vos enregistrements:
awk '/^Amino acid alphabet/{printf $NF FS} /^Sequence length/{print $NF}' file 19 115 20 126 19 131
Merci, ça marche. Cependant, il montre la sortie sur le terminal. Existe-t-il un moyen de l'imprimer dans un fichier?
Pour imprimer la sortie de n'importe quelle commande shell dans un fichier: commande> sortie_file.txt code>
Merci de votre aide. J'utilisais >> pour imprimer au fichier et cela me donnait des erreurs. Je vais aussi lire la commande AWK.
Ce code: Il existe de nombreuses façons d'obtenir ce que vous voulez avec BASH. on consiste à utiliser Grep avec PCRE (Perl-style) regex activé: p> Notez que la sortie Rediriger est grep -i "alphabet acide aminé = $ i" test.txt >> out.txt code> inclut l'expansion de shell de
$ i code>. Si vous n'avez pas donné de valeur à
i code>, le motif de recherche est résolu à
alphabet d'acide aminé = code> et trouvera ainsi chaque ligne qui contient cela. Le
i code> changerait le modèle de recherche si
$ i code> avait une valeur.
(? <= string) code> dit à Grep que pour le reste à Correspondre, il doit avoir été précédé de
chaîne code>, mais
chaîne code> ne fait pas partie du match.
-po code> sont les options pour activer PCRE (STYLE PERL) et d'imprimer uniquement la correspondance, plutôt que la ligne entière dans laquelle il y avait une correspondance. P>
>> code> si vous souhaitez ajouter à un fichier s'il contient déjà des lignes,
> code> écrasera un fichier existant s'il existe (sans demander de confirmation!) p> p>
Je vois que vous le vouliez dans des colonnes pour chaque type, que ce qui précède ne le fait pas, mais peut être fait avec un pérl one-liner, mais si vous avez une solution de travail comme celle de Thanasisp, je m'inclinerai.
@Thatanasisp merci! Je pense que cela pourrait être délicat de faire en un seul grep, car les chaînes demandées sont sur différentes lignes, mais la production devrait être sur une. Je serais enclin à l'envelopper dans un Perl -E ... mais cela semble loin de ce que l'OP voulait.
Oui droite. J'essaie juste de créer une réponse de ce grep. Également pâte -d '' << (Pattern Grep1) <(Pattern Grep2) code> Avec exactement votre commande Grep pourrait fonctionner (pour Bash Shell uniquement)
$ awk -v RS= '{print $(NF-4), $NF}' file 19 115 20 126 19 131
-v rs = code> définit les lignes vides comme séparateur d'enregistrement? C'est magnifique, @ed, lol. Un espace sur ces lignes lancera une clé à singe, mais je l'aime.
@Paulhodges Oui, c'est également appelé "mode de paragraphe" et est l'approche commune pour traiter le problème assez courant des blocs de texte séparés par des lignes vierges.
sed code> peut le faire aussi.
/ ^ alphabet d'acide aminé = / h code> stocke la première ligne dans le tampon de sauvegarde .
/ ^ Longueur de séquence = / { code> déclenche toutes les étapes à l'intérieur des boucles.
H code> ajoute la ligne en cours au tampon de sauvegarde.
x code> sonne la mémoire tampon de sauvegarde à l'espace de travail.
s / [^ 0-9] + / / g; code> modifie chaque séquence sur les non-chiffres dans un seul espace.
Cela inclut la nouvelle ligne.
s / ^ //; code> supprime l'espace de tête.
p code> imprime la ligne de sortie de ce jeu de données. P> p>
Qu'est-ce que tu as essayé jusque-là?
@ markp-fuso comme je suis nouveau à bash, tout ce que je pourrais essayer jusqu'à présent est:
grep -i "alphabet acide amino = $ i" test.txt >> out.txt code> mais, je n'ai pas t veux le mot "alphabet acide aminé" dans la sortie. Je veux seulement les valeurs de "alphabet d'acide aminé" et "longueur de séquence" comme deux colonnes.
@ DAVI54, veuillez envelopper vos échantillons dans des balises de code (pour le rendre claire sage). Ajoutez également vos efforts que vous avez montrés dans votre commentaire dans votre question s'il vous plaît.
@ Ravindersingh13 Cela a-t-il l'air mieux maintenant? J'ai essayé de mettre mes échantillons de données dans des balises de code et ajouté ma commande éprouvée dans la question. Merci.
@ DAVI54 Pour formater le code, n'oubliez pas d'utiliser le bouton
{} code> ou d'indenter les lignes avec 4 espaces. N'utilisez pas de balises comme
code> ou code> etc autour du code. Acclamations.
Ah d'accord. Mes excuses, c'est juste mon manque d'expérience avec cela. Gardera cela à l'esprit. Merci.