AWK连接记录分隔符之间的行

时间:2014-03-11 20:07:25

标签: unix awk

我是awk的新手并且有一个问题。我有一个使用>的文件作为记录分隔符,在记录分隔符下面是随机字符串。基本上我想要做的是使用awk打印记录分隔符并加入记录分隔符下面的字符串。

Example file:

input:
>1
AAAA
BB
CCCCCCC
>2
AA
BBBBBBB
CCCC
...

output:
>1
AAAABBCCCCCCC
>2
AABBBBBBBCCCC
...

我有这个awk程序,当记录分隔符下面有一定数量的行时(如第一个例子中所示):

awk 'BEGIN { FS = "\n"; RS = ">" } {print ">"$1 } {print $2$3$4}' file

有没有办法可以使用awk来计算可能出现在记录分隔符下方的任意数量的字符串?

Example:
input:
>1
AAAAAA
BBB
CCCCCCCC
DDDD
FFF
>2
AAAAA
CCC
...

output:
>1 
AAAAAABBBCCCCCCCCDDDDFFF
>2
AAAAACCC
...

3 个答案:

答案 0 :(得分:3)

这是awk

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

答案 1 :(得分:2)

你可以从2循环到NF,这是一个字段数的内置变量。

使用printf()打印它们以避免输出换行符。然后printf()记录末尾的一个换行符。

awk 'BEGIN { FS = "\n"; RS = ">" } 
    { print ">"$1 } 
    { for(i=2; i<NF; ++i) printf($(i)); }
    { printf("\n"); }' file

答案 2 :(得分:1)

awk '
    BEGIN  {RS=">"; FS="\n"; OFS=""} 
    NR > 1 {$1 = $1 FS; print RS, $0}
' file