Donc, j'ai une chaîne qui ressemble à ceci:
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
Et je veux diviser la chaîne en morceaux de 3 caractères délimités par un signe «+».
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA
Et je veux le faire avec mon bon ami sed
.
j'ai essayé
cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'
... sans succès.
Quelle sed
commande puis-je utiliser?
text-processing
sed
ixtmixilix
la source
la source
Réponses:
Puisque vous ne voulez pas de suivi
+
, vous pouvez faire:C'est-à-dire, foldles lignes sur l' idth de 3caractère w, et pasteces 3 lignes de caractère avec elles selfes avec +comme délimiteur qui en fait est comme changer chaque caractère de nouvelle ligne mais le dernier en a
+
. Si l'entrée avait plus d'une ligne, vous vous retrouverez avec ces lignes jointes avec une+
qui peut ou non être ce que vous voulez.Si vous en avez besoin
sed
, vous pouvez supprimer la fin+
après:la source
+$
correspond à un symbole plus juste avant la fin d'une ligne.fold -w3
casse la chaîne en 3 lignes de caractères.paste -sd+ -
transforme les nouvelles lignes en+
.pour travailler, vous n'avez pas besoin d'échapper aux
{}
symboles:la source
Cela pourrait fonctionner pour vous (GNU sed):
la source
Si sed n'est pas un must, l'utilisation de Ruby pourrait être une alternative. L'interpréteur Ruby,,
ruby
peut être utilisé comme sed et awk en l'exécutant avec l'-n
option qui le fait itérer sur son entrée. L'interpréteur peut ensuite être alimenté avec une ligne Ruby en l'ajoutant comme argument à l'-e
option (qui indique à l'interpréteur d'interpréter l'argument de-e
plutôt que de rechercher un script dans un fichier).Pour ce problème particulier, vous pouvez utiliser le one-liner suivant (adapté de /programming//a/3184271/789593 ):
En langage clair, il
scan(/.{3}|.+/)
dans la chaîne d'entrée,$_
(dans ce cas, l'entrée devrait provenir de l'entrée standard) et place chaque correspondance dans un tableau,join("+")
,puts
.Par exemple
Notez qu'il n'ajoute aucun «+» de fin.
la source