繁体   English   中英

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

[英]AWK join lines between record separator

我是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
...

这是一个awk

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM