Entonces, tengo una cadena que se ve así:
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
Y quiero dividir la cadena en fragmentos de 3 caracteres delimitados por un signo '+'.
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA
Y quiero hacer eso con mi buen amigo sed
.
Lo intenté
cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'
... sin éxito.
¿Qué sed
comando puedo usar?
text-processing
sed
ixtmixilix
fuente
fuente
Respuestas:
Como no quieres un seguimiento
+
, puedes hacer:Es decir, foldlas líneas en idth de 3caracteres w, y pasteesas 3 líneas de caracteres con ellos selfos con +el deliminador, que en efecto es como cambiar cada carácter de nueva línea pero el último en un
+
. Si la entrada tenía más de una línea, terminará con esas líneas unidas con una+
que puede o no ser lo que desea.Si lo necesita
sed
, puede eliminar el final+
después de:fuente
+$
coincide con un símbolo más inmediatamente antes del final de una línea.fold -w3
rompe la cadena en 3 líneas de caracteres.paste -sd+ -
convierte las nuevas líneas en+
.para comenzar a trabajar no necesita escapar de los
{}
símbolos:fuente
Esto podría funcionar para usted (GNU sed):
fuente
Si sed no es imprescindible, usar Ruby podría ser una alternativa. El intérprete de Ruby
ruby
, se puede usar como sed y awk ejecutándolo con la-n
opción que lo hace iterar sobre su entrada. El intérprete puede ser alimentado con Ruby one-liner agregándolo como argumento a la-e
opción (que le dice al intérprete que interprete el argumento en-e
lugar de buscar un script en un archivo).Para este problema en particular, puede usar el siguiente one-liner (adaptado de /programming//a/3184271/789593 ):
En lenguaje sencillo
scan(/.{3}|.+/)
en la cadena de entrada$_
(en este caso, se espera que la entrada provenga de la entrada estándar) y coloca cada coincidencia en una matriz,join("+")
,puts
.Por ejemplo
Tenga en cuenta que no agrega ningún '+' final.
fuente