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