2010-03-02 12 views

Odpowiedz

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

Pozostałe białe znaki w sekwencji, np. "paxpaxpax pax" zamiast "paxpaxpaxpax". Jak mogę to usunąć? – neversaint

+0

Widzę, więc chcesz zostawić spację po>, patrz edycja – ghostdog74

2

Jest to jeden ze sposobów, aby to, co chcesz za pomocą 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. ładne, ale zbyt brzydkie i skomplikowane jak na mój gust. – ghostdog74

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

... co, oczywiście, można zapisać wiele krótszy w razie potrzeby.

0

To może pracować dla Ciebie:

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

lub to:

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

lub to:

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

Najkrótsza sed rozwiązanie jakie udało mi się znaleźć:

sed -n '/^>/!{H;$!b};s/$/ /;x;1b;s/\n//g;p' 
Powiązane problemy