将行附加到上一行

时间:2014-02-19 21:51:04

标签: awk

我正在尝试追加以>开头的所有行到上一行不以>

开头
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'

4 个答案:

答案 0 :(得分:2)

使用awk

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

答案 1 :(得分:2)

使用awk

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

如果你不在乎输出在第一行产生了新行,这里是较短的一行。

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

答案 2 :(得分:2)

我认为你需要的只是一点sed

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

结果:

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

答案 3 :(得分:0)

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