Então, eu tenho uma string que se parece com isso:
AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA
E eu quero dividir a string em pedaços de 3 caracteres delimitados por um sinal de '+'.
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA
E eu quero fazer isso com meu bom amigo sed
.
eu tentei
cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g'
... sem sucesso.
Que sed
comando posso usar?
text-processing
sed
ixtmixilix
fonte
fonte
Respostas:
Como você não deseja um rastreamento
+
, você pode fazer:Ou seja, foldas linhas do 3caractere width e pasteas três linhas de caracteres com os selfos com +o delimitador que, na verdade, é como alterar todos os caracteres da nova linha, exceto o último em a
+
. Se a entrada tiver mais de uma linha, você terminará com as linhas unidas a uma+
que pode ou não ser o que você deseja.Se você precisar
sed
, você pode remover o+
seguinte:fonte
+$
corresponde a um símbolo de adição imediatamente antes do final de uma linha.fold -w3
quebra a sequência em três linhas de caracteres.paste -sd+ -
transforma as novas linhas em+
.para dar certo, você não precisa escapar dos
{}
símbolos:fonte
Isso pode funcionar para você (GNU sed):
fonte
Se o sed não for obrigatório, usar Ruby pode ser uma alternativa. O intérprete Ruby,,
ruby
pode ser usado como sed e awk, executando-o com a-n
opção que faz iterar sobre sua entrada. O intérprete pode então ser alimentado com uma linha única do Ruby, adicionando-o como argumento à-e
opção (que instrui o intérprete a interpretar o argumento, em-e
vez de procurar um script em um arquivo).Para esse problema específico, você pode usar a seguinte linha única (adaptada de /programming//a/3184271/789593 ):
Em linguagem simples,
scan(/.{3}|.+/)
na sequência de entrada$_
(nesse caso, espera-se que a entrada seja padrão) e coloca cada correspondência em uma matriz,join("+")
,puts
.Por exemplo
Observe que ele não adiciona nenhum '+' à direita.
fonte