2014-02-19 55 views
2

我想追加與>開始前行未開頭的所有行>追加行上一行

cat tmp 

ATAAACGGAAAAACACTACTTTAGCTTACGGGATCCGGT 
>Aa_816 
>Aa_817 
>Aa_818 
CCAAACGGAAAAACACTACTTGAGCTTACGGGATCCGGT 
>Aa_940 
>Aa_941 
CTAAAAGGAAAAACACTACTTTAGCTTTTGGGATCCGGT 

我想是這樣的:

ATAAACGGAAAAACACTACTTTAGCTTACGGGATCCGGT >Aa_816 >Aa_817 >Aa_818 
CCAAACGGAAAAACACTACTTGAGCTTACGGGATCCGGT >Aa_940 >Aa_941 
CTAAAAGGAAAAACACTACTTTAGCTTTTGGGATCCGGT 

這幾乎讓我有:

cat tmp |awk '!/>/ {sub(/\\$/,""); getline t; print $0 t; next}; 1' 

回答

0
awk '/^[^>]/ { if (length(old) > 0) print old; old = $0 } 
    /^>/ { old = old " " $0 } 
    END  { if (length(old) > 0) print old }' 
2

隨着awk

awk '!/^>/{printf "%s%s", (NR==1)?"":RS,$0;next}{printf "%s", FS $0}END{print ""}' file 
+1

你應該總是提供printf的格式說明:'printf的 「%s%S」 ,(NR == 1)?「」:RS,$ 0'和'printf「%s」,FS $ 0' - 如果要打印的字符串包含%-directives,這可以保護您。 –

+0

謝謝@glennjackman。你說得對,我已經更新了答案。 –

2

用awk

awk '!/>/{printf (NR==1)?$0:RS $0;next}{printf FS $0}' file 

如果你不在乎輸出具有第一線產生的新的生產線,這裏是一個短。

awk '{printf (/>/?FS $0:RS $0)}' file 
2

我認爲,所有你需要的是一點點sed

sed ':a; N; $!ba; s/\n>/ >/g' file 

結果:

ATAAACGGAAAAACACTACTTTAGCTTACGGGATCCGGT >Aa_816 >Aa_817 >Aa_818 
CCAAACGGAAAAACACTACTTGAGCTTACGGGATCCGGT >Aa_940 >Aa_941 
CTAAAAGGAAAAACACTACTTTAGCTTTTGGGATCCGGT 
+0

+1爲邏輯。 – BMW