2010-03-02 17 views

Respuesta

4
$ awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }' file 
> sq1 foofoofoobarfoofoofoo 
> sq2 quxquxquxbarquxquxquxbarquxx 
> sq3 paxpaxpaxpax 
+0

hay espacios en blanco restantes en la secuencia, p. "paxpaxpax pax" en lugar de "paxpaxpaxpax". ¿Cómo puedo eliminar eso? – neversaint

+0

veo, por lo que desea dejar un espacio después de>, vea editar – ghostdog74

2

Esta es una manera de hacer lo que desee con sed:

sed -n '1{x;d;x};${H;x;s/\n/ /1;s/\n//g;p;b};/^>/{x;s/\n/ /1;s/\n//g;p;b};H' 
+0

+1. agradable, pero demasiado feo y complicado para mi gusto. – ghostdog74

1
perl -ne '!/^>/ ? chomp($p) : (chomp $_, $_.=" "); print $p; $p = $_; END{print $p} 

... que, por supuesto, si se desea se podría escribir mucho más corto.

0

Esta es podría funcionar para usted:

sed ':a;$!{N;ba};s/\n//g;s/> sq[0-9]*/\n& /g;s/.//' file 

o esto:

sed ':a;$!N;s/\n\([^>]\)/\a\1/;ta;s/\a/ /;s///g;P;D' file 

o esto:

awk -vRS='> sq' '{sub(/^/,RS);sub(/\n/," ");gsub(/\n/,"")};NR>1' file 
0

más corta sed solución de lo que yo era capaz de encontrar:

sed -n '/^>/!{H;$!b};s/$/ /;x;1b;s/\n//g;p' 
Cuestiones relacionadas